Delphi 6,Oracle 10g。
三层系统,server端调用Tquery执行语句:{call pkg_inventorytaking.Quer()}
本意是要返回数据集到到client端界面。
oracle package结构为:
CREATE OR REPLACE PACKAGE pkg_inventorytaking
AS
type cur_index is ref cursor;
PROCEDURE Query (ResultCursor OUT cur_index);
end pkg_inventorytaking;
/CREATE OR REPLACE PACKAGE BODY pkg_inventorytaking
AS
procedure Query (ResultCursor OUT cur_index)
IS
v_sql varchar2(32767);
BEGIN
v_sql :='select语句 ' ;
open ResultCursor FOR
v_sql;
END ;
end pkg_inventorytaking;
/在sqlplus下执行
var abc refcursor
execute inventorytaking.Query(:abc)
print abc
该PACKAGE 可以正常运行。但是在delphi下运行时server端报错:
Project xxx.exe raised exception class EDBEngineError with message 'General SQL Error.'.Process stopped. Use step or Run to continue.如果将Tquery执行语句改为v_sql中的select语句则可正常执行,但是这里使用PACKAGE的本意是为了传递相关条件参数到v_sql中的select语句,为了简化测试,所以这里已经将所有参数都去掉了。可是还是测试不通过。也有尝试将tquery改为:
object Query1: TQueryDatabaseName = 'UseProc'SQL.Strings = (
'begin'
' Query (ResultCursor =>:RecCur);'
'end;')
ParamData = <
item
DataType = ftCursor
Name = 'RecCur'
ParamType = ptInputOutput
end>end但是还是发生报错:SQL无法applicated.那位大大指点一下迷津,先在这里谢过了
三层系统,server端调用Tquery执行语句:{call pkg_inventorytaking.Quer()}
本意是要返回数据集到到client端界面。
oracle package结构为:
CREATE OR REPLACE PACKAGE pkg_inventorytaking
AS
type cur_index is ref cursor;
PROCEDURE Query (ResultCursor OUT cur_index);
end pkg_inventorytaking;
/CREATE OR REPLACE PACKAGE BODY pkg_inventorytaking
AS
procedure Query (ResultCursor OUT cur_index)
IS
v_sql varchar2(32767);
BEGIN
v_sql :='select语句 ' ;
open ResultCursor FOR
v_sql;
END ;
end pkg_inventorytaking;
/在sqlplus下执行
var abc refcursor
execute inventorytaking.Query(:abc)
print abc
该PACKAGE 可以正常运行。但是在delphi下运行时server端报错:
Project xxx.exe raised exception class EDBEngineError with message 'General SQL Error.'.Process stopped. Use step or Run to continue.如果将Tquery执行语句改为v_sql中的select语句则可正常执行,但是这里使用PACKAGE的本意是为了传递相关条件参数到v_sql中的select语句,为了简化测试,所以这里已经将所有参数都去掉了。可是还是测试不通过。也有尝试将tquery改为:
object Query1: TQueryDatabaseName = 'UseProc'SQL.Strings = (
'begin'
' Query (ResultCursor =>:RecCur);'
'end;')
ParamData = <
item
DataType = ftCursor
Name = 'RecCur'
ParamType = ptInputOutput
end>end但是还是发生报错:SQL无法applicated.那位大大指点一下迷津,先在这里谢过了
Provider=MSDAORA.1;Password=xxx;User ID=xxx;Data Source=orcl;Persist Security Info=True使用ADODataSet1:
ADODataSet1.Close;
ADODataSet1.CommandText:='{call pkg_test.getlist}';
ADODataSet1.Open;
http://topic.csdn.net/t/20061124/10/5181888.html
tquery.commondtext:='{call pkg_inventorytaking.Query()}' ;会报语法出错。
如果设为tquery.commondtext:='call pkg_inventorytaking.Query()' ;则会报参数的数量或type不匹配Query()。是否需要把游标参数设出来呢?如果需要的话要怎么设呢?我设成'call pkg_inventorytaking.Query(:cur_index)'可是报operation can't applicated