Sat*_*hat 5 plsql dynamic-sql oracle10g execute-immediate
我正在尝试让这个动态SQL运行(使用EXECUTE IMMEDIATE)
M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 from :m_var2 RETURNING MAX(:m_var1)+1 INTO :m_var3';
EXECUTE IMMEDIATE M_SQL_STATEMENT
   USING M_COLUMN_NAME, UPPER(P_TABLE_NAME), M_COLUMN_NAME
   RETURNING INTO M_SEQ_NUMBER;
但是,在尝试运行时,我一直在努力
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;
| 归档时间: | 
 | 
| 查看次数: | 6103 次 | 
| 最近记录: |