请问有没有方法在存储过程中实现这样的功能?问题内详

星空朗朗 2003-08-30 04:12:14
入参:表的名称,记录ID(表的关键字)
出参:把所有字段值连接起来
例如表 T1(F1,F2,F3) F1,F2,F3都是VARCHAR2型,F1是关键字,表的一个记录为:
('1','abc','def')
调用过程输入('T1','1'),输出为'1abcdef'

要求对任意表有效

可以实现吗?
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
星空朗朗 2003-08-31
  • 打赏
  • 举报
回复
to jiezhi(浪子) :
我明白啦,你真聪明
星空朗朗 2003-08-30
  • 打赏
  • 举报
回复
to jiezhi(浪子) :
真是没想到还有col这样奇妙的系统表 :)

但下面这个部分我不是很明白:

str:='select '||str||' into '||result||' from '||V_tableName
where '||v_condition;
execute immediate str;
return result;

改用

return str;

不行吗?
zqbchina 2003-08-30
  • 打赏
  • 举报
回复
受益菲浅
beckhambobo 2003-08-30
  • 打赏
  • 举报
回复
create procedure pro(p_table in varchar2,p_f1 in varchar2,p_rc out varchar2)
as
str varchar2(50);
begin
str:='select f1||f2||f3 from '||p_table||' where f1='||p_f1;
execute immediate str into p_rc;
end;
/
jiezhi 2003-08-30
  • 打赏
  • 举报
回复
create or replace function SP_GetData(V_tableName IN STRING,v_condition in string)
return varchar2
IS

TYPE c_curtype IS REF CURSOR;
c_cur c_curtype;
str STRING(2000):='';
v_tname col.tname%TYPE;
v_cname col.cname%TYPE;
result string(1000);
BEGIN
OPEN c_cur FOR SELECT tname,cname FROM col
WHERE tname=''||V_tableName||'';
LOOP
FETCH c_cur INTO v_tname,v_cname;
EXIT WHEN c_cur%NOTFOUND;
str:=''||v_cname||''||''||str;
END LOOP;
CLOSE c_cur;
str:='select '||str||' into '||result||' from '||V_tableName where '||v_condition;
execute immediate str;
return result;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
end SP_GetData;
/
我沒有試,你測一下吧,會出錯的地方就在str:=''||v_cname||''||''||str;
jiezhi 2003-08-30
  • 打赏
  • 举报
回复
完全可以啊。
使用到的系統表col

17,082

社区成员

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

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