在plsql中的单个变量中传递两个或更多参数

时间:2016-12-22 07:14:22

标签: sql oracle plsql

我到了。 ORA-1722错误,同时将一个单个变量(54,55,56)传递给一个过程。

在程序游标块中我写了:

 Select * from emp where deptid in(  inputparameter);

在运行程序时,错误出现在上面的select语句中。

有没有办法在单个参数中处理这种情况

2 个答案:

答案 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