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结果就是正确的,使用后始终无法运行
oracle动态sql使用自定义类型出错
答案:2 悬赏:30 手机版
解决时间 2021-03-15 22:21
- 提问者网友:不要迷恋哥
- 2021-03-15 13:59
最佳答案
- 五星知识达人网友:怙棘
- 2021-03-15 15:34
EXECUTE IMMEDIATE 'SELECt TY_EMP(id,name,salary) FROM emp ' BULK COLLECT INTO ty;
全部回答
- 1楼网友:归鹤鸣
- 2021-03-15 16:56
传入的参数在查询那里无法判断了
判断那里这种写法好象有点问题
如果只是实现这个功能没必要这么复杂
我写了一个供你参考吧
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;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯