当前位置: 首页 > 知识库问答 >
问题:

在plsql [duplicate]的单个变量中传递两个或多个参数

巫墨一
2023-03-14

我得到了。ORA-1722向过程传递一个单个变量而不是一个数字(如54,55,56)时出错。

在过程光标块中,我写了:

 Select * from emp where deptid in(  inputparameter);

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

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

共有2个答案

贝洲
2023-03-14

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)您可以为方案创建新类型,例如

创建或替换类型“TNUMBERLIST_TABLE”作为数字表

并像输入参数一样在您的过程中使用它,例如:

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));
司徒杜吟
2023-03-14

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

结果< code >输入参数= 1,3

 类似资料:
  • 问题内容: 假设我有这个功能: 我想这样称呼它: 当然,不能用这种方法来完成,因为Postgres试图用该名称和三个不存在的参数来查找函数。 我试图用引号引起来,但在这种情况下,参数解释错误: data1’,’data2’,’data3 ,就像一个字符串一样。 有没有一种方法可以在参数中放置多个值,以便IN子句可以识别它? 问题答案: 您的函数将不会被创建。之后是句法废话。 无论哪种方式,带有 参

  • 问题内容: 我的报告中有几个“多项选择”参数。我正在尝试找到一种方法来为Web查询字符串中的单个参数传递多个值?如果我传递一个值,则可以正常工作。 该报告运行良好,可以为单个参数选择多个选项。我的麻烦在于网络查询字符串。 问题答案: 尽管John Sansom的解决方案有效,但还有另一种方法可以执行此操作,而不必使用可能效率低下的标量值UDF。在SSRS报告中,在查询定义的“参数”选项卡上,将参数

  • 我正在开发一个项目QR扫描仪应用程序使用Zxing扫描仪库,我想输入扫描数据到一个ListView。所以我想在扫描项目后将ItemName和ItemPrice输入到ListView中。为了区分itemName和itemPrice与扫描器结果(纯文本),我使用了string tokenizer类,然后可以分别获得itemName和Price。 解决方案应该是,当用户扫描一个项目时,它应该在列表视图中

  • 但是,当我试图将此代码更改为以下代码时,我得到了一个错误-错误:Main method,在类MyClass中找不到,请将Main method,定义为:public static void Main(string[]args)。我需要接收owner和consumerName作为我的程序的参数/输入。 ,这是怎么做到的?

  • 问题内容: 我正在使用shell_exec方法从PHP调用test.sh。 但是,命令行脚本说它仅收到1个参数:/tmp/my_script.php 当我将呼叫更改为: 码: 它说它收到了3个参数,但是argv [1]和argv [2]为空。 当我将呼叫更改为: 码: 脚本最终将按预期接收所有3个参数。 您是否始终需要使用脚本发送仅带引号的文本,并且不允许发送$ var这样的变量?还是有一些特殊的

  • 问题内容: 我有这个站点,它的页面之一从数据库中创建了一个简单的人员列表。我需要将一个特定的人添加到我可以访问的变量中。 如何修改该行以将$ ms变量也传递给视图? 问题答案: 只需将其作为数组传递: 或将它们链接起来,就像@Antonio提到的那样。