informix 的动态sql是可以解决这样的问题,因为informix是直接先运行select语句,然后将得到的结果集按字段截取,这样就可以实现上述函数。
但是oracle在运行动态sql的时候select出的值必须先制定存储在变量中,所以麻烦的就在这里。
不知道有没有什么方法解决,本人oracle动态sql还不是很熟练,正在学习中,望各位大神能指导一下。
但是oracle在运行动态sql的时候select出的值必须先制定存储在变量中,所以麻烦的就在这里。
不知道有没有什么方法解决,本人oracle动态sql还不是很熟练,正在学习中,望各位大神能指导一下。
int select(*mysql,int filednum,...) ; 这就是函数实现方式。
调用该函数的时候只需要传入具体的sql语句和参数,就能返回该sql语句查询得到的值。所以针对不同的sql语句,参数个数不一致,参数类型也不一致。
int select(*mysql,int filednum,...) ; 这就是函数实现方式。
调用该函数的时候只需要传入具体的sql语句和参数,就能返回该sql语句查询得到的值。所以针对不同的sql语句,参数个数不一致,参数类型也不一致。
要不你就设计成1个参数吧,SQL语句(传入参数)。
返回类型为一个动态游标,这样就不会受参数个数和类型的限制了
int select(*mysql,int filednum,...) ; 这就是函数实现方式。
调用该函数的时候只需要传入具体的sql语句和参数,就能返回该sql语句查询得到的值。所以针对不同的sql语句,参数个数不一致,参数类型也不一致。
要不你就设计成1个参数吧,SQL语句(传入参数)。
返回类型为一个动态游标,这样就不会受参数个数和类型的限制了能详细点介绍一下这个方法么,谢谢
如下:
function:
create or replace function sql_test (sql_str varchar2) return SYS_REFCURSOR is
po_return sys_refcursor;
begin
open po_return for sql_str;
return(po_return);
end ;
测试:declare
cur1 SYS_REFCURSOR;
v_dual varchar2(40);
i number;
begin
v_dual:='select 1 id from dual';
cur1:=sql_test(v_dual);
fetch cur1 into i;
dbms_output.put_line('----------------i :'||i);
close cur1; end;