Plsql 使用带绑定变量的Execute Immediate语句时出现无效表名错误

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'; 仍然会导致相同的错误。

我正在尝试运行这个动态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';

仍然会导致相同的错误。

您需要将表名和列名放入动态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;