急!cursor结果集值改变,并返回结果集。在线等,很难,高手进,答出来立即给分。

shanbingch 2007-12-06 06:59:01
存储过程问题:
在线等,很难,答出来立即给分。
现在要求是传入一个查询SQL语句,返回这个SQL语句的结果。
前提:SQL语句查询的项目数根据SQL语句不同而不同。SQL语句中可能有函数,子查询等等。非常复杂。

SQL查询出来的数据,要一项一项的检查,发现前两个字符等于“DD”就把这项的值变成“SSS”.
把改变后的结果集用 sys_refcursor 传出来。

我已经想到一部分,但是做不下去了。请大家多多帮忙,解决立即给分,高手们加油阿:

function fun_test(in_sql in varchar2, out_refcur out ref_cur) return number is
v_sql varchar2(400);
v_CursorID integer;
v_Dummy INTEGER;
v_ReturnRow INTEGER;
l_columnValue VARCHAR2(4000);
v_errmsg varchar2(20);
l_descTbl dbms_sql.desc_tab;
l_colCnt number;

begin
v_sql := in_sql;
v_CursorID := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(v_CursorID, v_sql, DBMS_SQL.native);
dbms_sql.describe_columns( v_CursorID, l_colCnt, l_descTbl );


for i in 1 .. l_colCnt loop
dbms_sql.define_column(v_CursorID, i, l_columnValue, 4000);
end loop;

v_Dummy := DBMS_SQL.EXECUTE(v_CursorID);

loop
v_ReturnRow := DBMS_SQL.FETCH_ROWS(v_CursorID);
if v_ReturnRow = 0 then
exit;
end if;
for i in 1 .. l_colCnt loop
DBMS_SQL.COLUMN_VALUE(v_CursorID, i, l_columnValue);
if not l_columnValue is null then
if length(l_columnValue) > 2 and substr(l_columnValue,1,2) = 'DD' then
l_columnValue := 'SSS';
end if;
end if;
end loop;
end loop;

DBMS_SQL.CLOSE_CURSOR(v_CursorID);

-- open out_refcur for v_sql;

exception
when others then
v_errmsg := sqlerrm;

end;
...全文
113 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mantisXF 2007-12-25
  • 打赏
  • 举报
回复
真滴?? TQ!
凤影 2007-12-25
  • 打赏
  • 举报
回复
我来了,哈哈
shanbingch 2007-12-25
  • 打赏
  • 举报
回复
好久没有来了,看到还没有结。
再来个人,我当散分了。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧