在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中的单个变量中传递两个或多个参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
PLS-00306:调用 'GET_LINE' 时参数的数量或类型错误。在 PL/SQL 中的函数中传递字符串参数时出现此错误