我到了。 ORA-1722错误,同时将一个单个变量(54,55,56)传递给一个过程。
在程序游标块中我写了:
Select * from emp where deptid in( inputparameter);
在运行程序时,错误出现在上面的select语句中。
有没有办法在单个参数中处理这种情况
答案 0 :(得分:0)
1)您可以为该语句使用动态sql并添加“inputparameter”,如字符串'54,55,56'
DECLARE
TYPE input_cursor IS REF CURSOR;
l_cursor input_cursor;
l_input_parameter VARCHAR2(4000) := '52,53,43';
BEGIN
open l_cursor for 'SELECT * FROM emp WHERE deptid in (' || l_input_parameter || ')';
END;
2)您可以为
等方案创建新类型 CREATE OR REPLACE TYPE "TNUMBERLIST_TABLE" AS TABLE OF NUMBER
并在您的过程中使用它,如输入参数,例如:
DECLARE
PROCEDURE output_list(p_table TNUMBERLIST_TABLE) IS
BEGIN
FOR cur IN (SELECT * FROM TABLE(p_table)) LOOP
dbms_output.put_line(cur.column_value);
END LOOP;
END;
BEGIN
output_list(p_table => TNUMBERLIST_TABLE(1,2,3,4,5,6));
END;
您的任务将是:
Select * from emp where deptid in (SELECT * FROM TABLE(p_table));
答案 1 :(得分:0)
我不确定你需要做什么,但你可以使用listagg
我们可以说id
列的值为(54,55,56)
在您的程序中:
create or replace procedure P_TEST
as
begin
declare inputparameter varchar2(38);
begin
SELECT LISTAGG(COMP_CODE, ', ') WITHIN GROUP (ORDER BY COMP_CODE) into inputparameter
FROM emp ;
end;
end;
结果inputparameter = 1,3