在pl sql中的单个变量中传递两个或多个参数[重复]

Posted

技术标签:

【中文标题】在pl sql中的单个变量中传递两个或多个参数[重复]【英文标题】:passing two or more parameyers in a single variable in plsql [duplicate] 【发布时间】:2016-12-22 07:14:21 【问题描述】:

我得到了。 ORA-1722 错误,同时将一个变量多于一个数字(如 (54,55,56))传递给过程。

在我写的过程游标块中:

 Select * from emp where deptid in(  inputparameter);

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

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

【问题讨论】:

实际上您的问题与this SO thread 重复,因为它代表您所处的位置。但是 SO 规则不允许我将其用作目标。您的参数类似于1,2,3,Oracle 将其视为字符串。所以需要将字符串转换成数字流或者使用动态SQL。指定线程中的答案将向您展示如何做到这一点。 【参考方案1】:

我不确定你需要做什么,但是你可以使用 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

【讨论】:

【参考方案2】:

1) 您可以对该语句使用动态 sql 并添加“输入参数”,如字符串 '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));

【讨论】:

以上是关于在pl sql中的单个变量中传递两个或多个参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL练习复合变量: 可以一次传递多个值到变量中。

使用ado.net将多个SQL表值参数传递到单个存储过程

PLS-00306:调用 'GET_LINE' 时参数的数量或类型错误。在 PL/SQL 中的函数中传递字符串参数时出现此错误

oracle-PL/SQL2

odp.net 可以将参数传递给布尔 pl/sql 参数吗?

如何通过 PL/SQL 中的 VARRAY 函数中的变量传递字符串值