永发信息网

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

答案:2  悬赏:30  手机版
解决时间 2021-03-15 22:21
  • 提问者网友:不要迷恋哥
  • 2021-03-15 13:59
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结果就是正确的,使用后始终无法运行
最佳答案
  • 五星知识达人网友:怙棘
  • 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;

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯