在我的存储过程中,我使用以下查询:
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)