在我的存储过程中,我使用以下查询:
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)类型变量。
答案 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 ;