Plsql 使用带绑定变量的Execute Immediate语句时出现无效表名错误
我正在尝试运行这个动态SQL(使用Plsql 使用带绑定变量的Execute Immediate语句时出现无效表名错误,plsql,oracle10g,dynamic-sql,execute-immediate,Plsql,Oracle10g,Dynamic Sql,Execute Immediate,我正在尝试运行这个动态SQL(使用executeimmediate) 然而,当我尝试运行这个时,我不断遇到 ORA-00903: Invalid table p_TABLE_NAME是接受作为输入的表名。我已确认表名和列名有效。我不明白为什么Oracle会抛出这个错误 FWIW将SQL语句更改为 M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 SEQ from :m_var2 RETURNING SEQ INTO :m_var3'; 仍然会导致相同的错误。
executeimmediate
)
然而,当我尝试运行这个时,我不断遇到
ORA-00903: Invalid table
p_TABLE_NAME是接受作为输入的表名。我已确认表名和列名有效。我不明白为什么Oracle会抛出这个错误
FWIW将SQL语句更改为
M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 SEQ from :m_var2 RETURNING SEQ INTO :m_var3';
仍然会导致相同的错误。您需要将表名和列名放入动态SQL中,例如
M_SQL_STATEMENT := 'SELECT MAX(' || M_COLUMN_NAME || ')+1 from '
|| P_TABLE_NAME';
EXECUTE IMMEDIATE M_SQL_STATEMENT INTO M_SEQ_NUMBER;
难道不能使用/传递表名和列名作为绑定变量吗?不,不可能,这就是使用动态SQL的全部原因:-)谢谢,@greynolds出于某种原因,我认为这是可能的,@greynolds-成功了。但是有两个错误,-SQL应该是
“SELECT MAX('| | M| COLUMN_NAME | |)+1 from'| | P_TABLE_NAME
和execute immediate不应该有“returning”-像这样-->execute immediate M_SQL_语句转换成M_SEQ_NUMBER代码>好消息。我将更改相关的回答:
M_SQL_STATEMENT := 'SELECT MAX(' || M_COLUMN_NAME || ')+1 from '
|| P_TABLE_NAME';
EXECUTE IMMEDIATE M_SQL_STATEMENT INTO M_SEQ_NUMBER;