Oracle Execute Immediate会丢失关键字错误

Wah*_*sud 2 oracle plsql

在我的存储过程中,我使用以下查询:

SELECT COUNT(*) INTO COL_NO FROM user_tab_columns WHERE table_name='PAY_SLIP_FEB_16';  
Run Code Online (Sandbox Code Playgroud)

此查询不会出错(因为它不应该).但这里的表名是固定的,所以我想使用一个提供表名的变量.所以我改变了这样的查询:

EXECUTE IMMEDIATE 'SELECT COUNT(*) INTO COL_NO FROM user_tab_columns WHERE table_name='''||TBL_NAME||'''';  
Run Code Online (Sandbox Code Playgroud)

此查询给出错误:

ORA-00905: missing keyword  
Run Code Online (Sandbox Code Playgroud)

我做错了什么?TIA.

注意:TBL_NAME是提供表名称的传入参数,COL_NAME只是NUMBER(5,0)类型变量.

Gor*_*off 10

我希望代码有INTO一部分,而EXECUTE IMMEDIATE不是动态查询字符串:

EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM user_tab_columns WHERE table_name='''||TBL_NAME||''''
        INTO COL_NO ;
Run Code Online (Sandbox Code Playgroud)

作为注释:我会使用单独的变量来编写它:

v_sql  := 'SELECT COUNT(*) FROM user_tab_columns WHERE table_name = ''@TBL_NAME''';
v_sql := REPLACE(v_sql, '@TBL_NAME', TBL_NAME)

EXECUTE IMMEDIATE v_sql INTO v_COL_NO ;
Run Code Online (Sandbox Code Playgroud)

  • 使用`@ TBL_NAME`然后在之后替换它有什么好处? (2认同)