永发信息网

oracle动态sql使用自定义类型出错

答案:2  悬赏:30  手机版
解决时间 2021-03-15 22:21
create table emp(id number, name varchar2(10), salary number ); --建表

insert into emp values (100,'jacky',5600);
insert into emp values (101,'rose',3000);
insert into emp values (102,'john',4500);

CREATE OR REPLACe TYPE "TY_EMP" IS OBJECT (id number, name varchar2(10), salary number )--建立自定义行类型
CREATE OR REPLACE TYPE "TY_EMP_TAB" IS TABLE OF TY_EMP --建立自定义类型

CREATE OR REPLACE FUNCTION F_BB_EMP(JYFS NUMBER) RETURN TY_EMP_TAB AS ty TY_EMP_TAB; --函数
BEGIN
EXECUTE IMMEDIATE 'SELECT TY_EMP(id,name,salary) BULK COLLECT INTO ty FROM emp '; --动态sql报错 未实施的功能
RETURN ty;
--SELECt TY_EMP(id,name,salary) BULK COLLECT INTO ty FROM emp; 不使用动态sql 结果正确
--RETURN ty;
END;

SELECt * FROM TABLE(F_BB_EMP(1))

我上面函数内注释掉的 不使用动态sql结果就是正确的,使用后始终无法运行
最佳答案
EXECUTE IMMEDIATE 'SELECt TY_EMP(id,name,salary) FROM emp ' BULK COLLECT INTO ty;
全部回答

传入的参数在查询那里无法判断了

判断那里这种写法好象有点问题

如果只是实现这个功能没必要这么复杂

我写了一个供你参考吧

create or replace function test_func (v_departmentid in varchar2) return number is   result number; begin select decode( count(*),  0 , -1, 0 ) into result from departments where departmentid= v_departmentid ;   return(result); end test_func;

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
桥头铺村地址在什么地方,想过去办事
初中学籍被删了,现在无法恢复吗?
丹凤县医院我想知道这个在什么地方
祥林嫂的故事
“我真的想一觉睡过去,再也不醒来。”用英文
心里难受,无法释怀,晚上睡不着觉,怎么办,
考研方向:计算机科学与技术专业本科生,未来
南京鸿鹄物业管理有限责任公司在哪里啊,我有
西游释厄传2称号
报废车辆卖给收购站如何注销车户口?
李泽勋这个名字怎么样
宁D-88385号车在中国平安保险公司固原支公司
为什么国产热水器便宜
我想把笔记本拿去重做系统,把里面的垃圾内存
蓟县双山加油站在哪里啊,我有事要去这个地方
推荐资讯
你好,电信宽带光纤复位了怎么注册
2013年办低保,村里要嫁出去的女儿身份证,户
洛克王国火系宠物排行榜
为什么我的手机输入密码后显示无法加入无线网
注销户口欠贷款用还吗
狼髀石的鉴定方法
公司在职时获得的公司奖励,离职后还能否兑现?
佳能 5D2在快门30秒、ISO100下测试噪点,噪点
请问重庆滴滴司机有什么奖励?
横县石塘镇财政所在哪里啊,我有事要去这个地
若报考常州大学怀德学院,毕业证是常大还是常
龙庭物业地址在什么地方,想过去办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?