经典问题: 熟悉三层的请进 (50分)

  • 主题发起人 主题发起人 Celestial dog
  • 开始时间 开始时间
C

Celestial dog

Unregistered / Unconfirmed
GUEST, unregistred user!
我的存储过程在pl/sql developer里调试通过,但是
在程序里出错:
ORA-06550:行1 列7
PLS-00306: 调用‘myStp’时自变量数量或类型错误!!
 
检查一下存储过程的参数类型的设置是否正确!
 
又是参数类型?!头大!
 
总算有人吱声啦~~
先谢谢上面两位大虾!
我的参数只有number和varchar2两种类型哑?!
唉,又要几天茶饭不思了[:D]
 
你有没有返回值啊?
例如: select count(*) from table
还需要设置返回参数的!
如果Insert或delete 没有返回值
就不需要设置返回参数!
 
有drop, create, alter ,update,需要设返回参数吗??
 
行1 列7 错误的位置 看来是变量的定义错误了!可不可以帖出来?
 
大虾,就拜托妮了/
--存储过程,实现单条记录交叉
create or replace procedure cross_wljy(
v_Sqlcode out number,
v_sqlerrm out varchar2,
v_ReturnCode out number,
v_ReturnMss out varchar2,
v_zbfl number,
v_jyid number,
v_wllx number
) is
--游标
cursor zbmc_cur is
select a.zbid,b.zbmc
from zbfl02 a,zbzd b
where a.zbflid=v_zbfl and a.zbid=b.zbid;

v_cursor number;
v_zbid number;

v_zbmc varchar2(30);
v_RowNum integer;
v_DropStr varchar2(100);
v_CreateStr varchar2(800);
v_alterStr varchar2(100);

v_updateStr varchar2(200);
begin
v_SqlCode:=0;
v_sqlerrm:='';
v_ReturnCode:=-1;
v_ReturnMss:='';
v_cursor:=dbms_sql.open_cursor;
--删除表
begin
v_DropStr:='drop table crosstab_wljy';
dbms_sql.parse(v_cursor,v_DropStr,dbms_sql.v7);
v_RowNum:=dbms_sql.execute(v_cursor);
exception
when Others then
if sqlcode!=-942 then

raise;
end if;
end;

--建表
if v_wllx=0 then
v_CreateStr:='create table crosstab_wljy as '||
' select ....';
end if;
if v_wllx=1 then
v_CreateStr:='create table crosstab_wljy as '||
' select ....';
end if;
dbms_sql.parse(v_cursor,v_CreateStr,dbms_sql.v7);
v_RowNum:=dbms_sql.execute(v_cursor);

--打开游标
open zbmc_cur;
loop
fetch zbmc_cur into v_zbid,v_zbmc;
exit when zbmc_cur%notFound;
--在表crosstab_wljy中添加字段
v_alterStr:='alter table crosstab_wljy add '||v_zbmc||' number(1)';
dbms_sql.parse(v_cursor,v_alterStr,dbms_sql.v7);
v_RowNum:=dbms_sql.execute(v_cursor);
--给新加字段赋值
v_updateStr:='update crosstab_wljy'||
' set '||v_zbmc||'=(select zbnr from jy02 where jyid='||v_jyid||
' and zbid='||v_zbid||')';
dbms_sql.parse(v_cursor,v_updateStr,dbms_sql.v7);
v_RowNum:=dbms_sql.execute(v_cursor);
end loop;
dbms_sql.close_cursor(v_cursor);
close zbmc_cur;
commit;
v_ReturnCode:=0;
exception
when Others then
v_sqlcode:=SqlCode;
v_sqlerrm:=SqlErrm;
close zbmc_cur;
dbms_sql.close_cursor(v_cursor);
rollback;
raise;
end cross_wljy;
 
LINE 14 (10): PLS-00201: 必须说明标识符 'ZBFL02'
LINE 13 (5): PL/SQL: SQL Statement ignored
LINE 13 (14): PLS-00320: 此表达式的类型说明不完整或格式错误
LINE 63 (5): PL/SQL: SQL Statement ignored
//以上是显示的编译错误,你先看看,我也查查
 
那是因为妮数据库没有那些表,我在pl/sql developer里已经调试通过,并且得到满意
的结果,只是在delphi里具体实现时就不行了~~
 
自己搞定了,sigh
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部