运行该过程时出现错误绑定变量错误

时间:2017-07-13 06:00:19

标签: oracle collections plsql

尝试执行过程时,我收到PLS-00049错误

使用集合类型变量时,我对cast和bind变量有疑问。

我的程序名为testprocedure,输入参数为v_gcif,类型为数组。

CREATE OR REPLACE type GCIF_ARRAY AS TABLE OF VARCHAR2(40);
CREATE OR REPLACE
PROCEDURE test_procedure (
    V_IS_ARX_ENABLED IN VARCHAR2,
    V_GCIF           IN GCIF_ARRAY)
IS
  --V_GCIF    OD_CUSTOMER_MASTER_TBL.OD_GCIF%type;
  err_txt VARCHAR2(100);

BEGIN  

  INSERT
  INTO test_table
    (
      OD_GCIF,
      OD_PROFILE_ID,
      OD_PROFILE_NAME
    )
  SELECT OD_GCIF,
    DEF_PROFILE_ID,
    PROFILE_NAME
  FROM test_map_table,
    test_temp_table

  WHERE DEF_PROFILE_ID = PROFILE_ID
  AND OD_GCIF         IN
    (SELECT COLUMN_VALUE FROM TABLE(CAST( :V_GCIF AS GCIF_ARRAY) )
    );

exception
  when others then
err_txt :='Error occured';

END;  

-

当我在编译期间运行程序时出现以下错误

PLS-00049: bad bind variable 'V_GCIF'

请你解释发生了什么以及为什么会发生错误..

2 个答案:

答案 0 :(得分:1)

V_GCIF是传递给此过程的参数。因此,您不需要在程序正文中添加:

SELECT COLUMN_VALUE FROM TABLE(CAST( :V_GCIF AS GCIF_ARRAY)
-- You don't need to specify :V_GCIF. Just use V_GCIF instead.

当我们通过编程语言中的一些代码执行sql语句时,我们使用:绑定变量,例如,C#。

答案 1 :(得分:0)

删除V_GCIF变量前面的冒号。

对PL / SQL变量的每次引用实际上都是BIND VARIABLE。