得到动态sql信息

本文介绍了一个使用PL/SQL编写的函数,该函数用于从数据库中获取特定条件的数据,并通过动态SQL实现数据检索。详细展示了如何打开游标、执行SQL语句及获取结果集的过程。
create or replace function fun_test(psname in varchar2,org_group_id in varchar2,model_id in varchar2,col_id in varchar2) return varchar2
is
  v_cursor   number;  
  Result varchar2(255);
  lsWhere varchar2(1000); 
  lsValue varchar2(1000);
  lsSQL varchar2(1000);
  iLen number(2);
  v_process Integer;
  TYPE value_array IS TABLE OF Varchar2(100) INDEX BY BINARY_INTEGER;
  lsColValue value_array;
begin
   lsWhere := '';
   select query_where, query_value into lsWhere,lsValue from test where row_id=col_id;
   if  then
  
   end if;
   iLen := length(lsValue) - length(replace(lsValue,',',''));
   lsSQL := 'select '|| lsValue ||' from test1 where a='''||psname||''' and b='||org_group_id||' and rownum < 2';
    for i in 0..iLen Loop
        lsColValue(i) := '';
    end loop;
   v_cursor:=DBMS_SQL.OPEN_CURSOR;
   DBMS_SQL.PARSE(v_cursor,lsSQL,dbms_sql.v7);
   for i in 0..iLen loop
       DBMS_SQL.define_column_char(v_cursor,i+1,lsColValue(i),100);  
   end loop;
    v_process:=DBMS_SQL.execute(v_cursor);  
    loop  
        if DBMS_SQL.FETCH_ROWS(v_cursor)=0   then  
            exit;  
        end   if;
        for i in 0..iLen Loop
            --lsColValue(i-1)
            DBMS_SQL.COLUMN_VALUE_CHAR(v_cursor,i+1,lsColValue(i));
            lsWhere := replace(lsWhere,'$'||(i+1)||'$',''''||trim(lsColValue(i))||'''');
        end loop;
    end   loop;  
    DBMS_SQL.CLOSE_CURSOR(v_cursor);
    return lsWhere;
end fun_getAdvanceConditin; 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值