关于DELPHI调用ORACLE的存储过程时(急) ( 积分: 100 )

  • 主题发起人 主题发起人 Hanpan
  • 开始时间 开始时间
H

Hanpan

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位
这是ORALCE的存储过程 (在PL/SQL能正常执行)
CREATE OR REPLACE PROCEDURE insert_data
x1 number,
x2 marc_data.marc1%type
)
AS
BEGIN
INSERT INTO MARC_DATA (主键码,marc1)
VALUES (x1,x2);
END insert_data;
注marc1的类型是nvarchar2(2000)
在pl/sql中
insert_data(1,UNISTR('/0031/0031/00ef/.....')) ,能执行成功 因为unistr('字符串很长')
可是在delphi调用
with ADOStoredProc do
begin
Close;
Parameters.clear;
procedurename:='insert_data';
Parameters.CreateParameter('@x1', ftVariant, pdInput, 10, 0);
Parameters.CreateParameter('@x2', ftVariant, pdInput, 4000, 0);
Parameters.ParamByName('@x1').Value :=1;
Parameters.ParamByName('@x2').Value := 'UNISTR('/0031/003100ef/')) ';
ExecProc;
执行的结果就行了insert_data(1,'UNISTR('/0031/0031/00ef/.....')')
把第二个参数做为字符串来了
可想用的是 insert_data(1,UNISTR('/0031/0031/00ef/.....'));
请问各位如何调用啊,先谢谢

end;
 
请各位帮帮忙啊
 
CREATE OR REPLACE PROCEDURE insert_data
x1 number,
x2 marc_data.marc1%type
)
AS
BEGIN
INSERT INTO MARC_DATA (主键码,marc1)
VALUES (x1,unistr(x2));
END insert_data;
with ADOStoredProc do
begin
Close;
Parameters.clear;
procedurename:='insert_data';
Parameters.CreateParameter('@x1', ftVariant, pdInput, 10, 0);
Parameters.CreateParameter('@x2', ftVariant, pdInput, 4000, 0);
Parameters.ParamByName('@x1').Value :=1;
Parameters.ParamByName('@x2').Value := '/0031/0031/00ef/';
ExecProc;
end;
你把oracle的函数传过过去了,不过是当成字符串了,你传字符串让他转换就成了
 
可这个存储过程VB中就能这样调用,
不能传字符串的原因是 unistr('字符串'),其中字符串最大有10000个符
 
可这个存储过程VB中就能这样调用,
不能传字符串的原因是 unistr('字符串'),其中字符串最大有10000个符
 
现在就是要传字符串最大有10000,就会出错啊,可这个存储过程VB可以调用的,所以不知DELPHI如何
 
我已解决了,不能用这种方法来调用
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
666
import
I
后退
顶部