绑定变量不存在

时间:2018-04-16 08:24:24

标签: oracle stored-procedures plsql

create or replace
PROCEDURE TEST3(CREATED_BY_IN IN VARCHAR2,SRC_NAME IN VARCHAR2,TGT_NAME IN VARCHAR2,OUTPUT OUT VARCHAR2)
IS
CHECK_STATUS INTEGER;
SRCSQL VARCHAR(1000);

BEGIN


 SRCSQL:= 'INSERT INTO TBLCNT SELECT '||''''||CREATED_BY_IN||''''||','|| ' COUNT(*),' ||''''||SRC_NAME||''''||' FROM  '||SRC_NAME ;



EXECUTE IMMEDIATE SRCSQL USING CREATED_BY_IN,SRC_NAME;

OUTPUT:=SRCSQL;
END;

我收到错误说明' Bind变量不存在'。 谁能帮助我这个

2 个答案:

答案 0 :(得分:3)

您正在使用连接的文本和变量执行查询,因此您不能将带有绑定变量的执行立即使用,因为在这种情况下不使用它们。

正确的语法是:

 SRCSQL:= 'INSERT INTO TBLCNT SELECT :p1, COUNT(*), :p2 FROM :p2';


EXECUTE IMMEDIATE SRCSQL USING CREATED_BY_IN, SRC_NAME, SRC_NAME;

请参阅文档https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems017.htm

答案 1 :(得分:0)

您可以在没有绑定变量的帮助下使用它。希望在片段下方有所帮助。

CREATE OR REPLACE PROCEDURE TEST3(
    CREATED_BY_IN IN VARCHAR2,
    SRC_NAME      IN VARCHAR2,
    TGT_NAME      IN VARCHAR2,
    OUTPUT OUT VARCHAR2)
IS
  CHECK_STATUS INTEGER;
  SRCSQL       VARCHAR(1000);
BEGIN
  SRCSQL:= 'INSERT INTO TBLCNT SELECT '||''''||CREATED_BY_IN||''''||','|| ' COUNT(*),' ||''''||SRC_NAME||''''||' FROM  '||SRC_NAME ;
  EXECUTE IMMEDIATE SRCSQL;
  OUTPUT:=SRCSQL;
END;