S
stoneskin
Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是linux下的oracle10g之前用oracle9i的时候程序是正常的,后来数据库升级到oracle10g的时候发现原来的调用存储过程都报错了,经检查是存储过程无法接受到传递过来参数导致。下面是个存储过程的例子:create or replace procedure pro_lwd(avc_academyid in integer, return_id out integer)isbegin if(avc_academyid is not null) then return_id := avc_academyid +100; else return_id := -1; end if; end;/delphi代码 SQLStoredProc1.Params.Items[0].Value := 101; SQLStoredProc1.Prepared := true; SQLStoredProc1.ExecProc; return_id := SQLStoredProc1.Params.Items[1].Value ; writeln('return_id='+return_id);调用之后返回的是-1。显然是没有接受到传递过去的参数。应该之前用oracle9i的时候是正常的,所以客户端的代码应该没有什么问题。接着还有一个更诡异的问题。目前同样的客户端访问另一台64位linux,同样版本的oracle10g 是可以正确传递过去参数的。这两个数据库系统不同之处就是一个32位一个是64位的。实在想不明白为什么会这样。还有一个问题。我想吧存储过程参数改为字符串类型的,看是否能传递过去,结果发现调用都报错了。create or replace procedure pro_lwd2(avc_academyid in varchar2, return_id out varchar2)isbegin if(avc_academyid is not null) then return_id := 'ok'; else return_id := 'error'; end if; dbms_output.put_line(return_id);end;/我把TSQLStoredProc控件的active设为true的话,就报错误:dbExpress error: Invalid Parameter 下面是控件的数据 object SQLStoredProc3: TSQLStoredProc MaxBlobSize = -1 Params = < item DataType = ftString Name = 'AVC_ACADEMYID' ParamType = ptInput Value = '333' end item DataType = ftString Name = 'RETURN_ID' ParamType = ptOutput Size = 2000 end> SQLConnection = SQLConnection1 StoredProcName = 'PRO_LWD2' Left = 129 Top = 196 end有那位大侠帮忙看看啊。困扰了很久了。