5

この動的 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';

それでも同じエラーが発生します。

4

1 に答える 1

8

テーブル名とカラム名を動的 SQL に入れる必要があるので、次のようになります。

M_SQL_STATEMENT := 'SELECT MAX(' || M_COLUMN_NAME || ')+1 from ' 
|| P_TABLE_NAME';

EXECUTE IMMEDIATE M_SQL_STATEMENT INTO M_SEQ_NUMBER;
于 2011-03-10T12:52:23.080 に答える