存储过程调用时总是出现"sqlora8.dll"错误.
测试一个简单的存储过程 ,参数直接赋值如下:就不会出错.
with fm_dm.cx do
begin
close;
sql.Clear;
sql.Add('call aa_test ('''+trim(edit7.Text)+''')');
execsql;
end;如果使用参数,则会出错:
with fm_dm.cx do
begin
close;
sql.Clear;
sql.Add('call aa_test (:fid ) ');
parambyname('fid').value := trim(edit7.Text);
execsql;
end;
说明:Delph7+oracle10g,采用BDE连接数据库,其中CX为query控件,aa_test为存储过程.aa_test没有错误.
测试一个简单的存储过程 ,参数直接赋值如下:就不会出错.
with fm_dm.cx do
begin
close;
sql.Clear;
sql.Add('call aa_test ('''+trim(edit7.Text)+''')');
execsql;
end;如果使用参数,则会出错:
with fm_dm.cx do
begin
close;
sql.Clear;
sql.Add('call aa_test (:fid ) ');
parambyname('fid').value := trim(edit7.Text);
execsql;
end;
说明:Delph7+oracle10g,采用BDE连接数据库,其中CX为query控件,aa_test为存储过程.aa_test没有错误.
begin
close;
sql.Clear;
sql.Add('call aa_test (' + :fid + ') ');
parambyname('fid').value := trim(edit7.Text);
execsql;
end;
存储过程是没有问题的,可以单独运行的.并直接赋值调用存储过程也不会出错.上面测试用的存储过程:create or replace PROCEDURE AA_TEST
(
v_fid IN NUMBER DEFAULT NULL
)
AS
str varchar2(500);
BEGIN
str := ' update cggl_phsz set del=1 where fid='''||v_fid||'''';
execute immediate str;
commit;
END AA_TEST;
这样肯定是不行的,语法错误.sql.Add('call aa_test (' + :fid + ') ');