Oracle Execute Immediate抛出缺少关键字错误

时间:2016-03-22 10:54:28

标签: oracle plsql

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

SELECT COUNT(*) INTO COL_NO FROM user_tab_columns WHERE table_name='PAY_SLIP_FEB_16';  

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

EXECUTE IMMEDIATE 'SELECT COUNT(*) INTO COL_NO FROM user_tab_columns WHERE table_name='''||TBL_NAME||'''';  

此查询提供错误:

ORA-00905: missing keyword  

我做错了什么? TIA。

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

1 个答案:

答案 0 :(得分:9)

我希望代码将INTO作为EXECUTE IMMEDIATE的一部分,而不是动态查询字符串中的一部分:

EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM user_tab_columns WHERE table_name='''||TBL_NAME||''''
        INTO COL_NO ;

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

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 ;