1つのクエリを実行する必要があります。クエリを実行する前に、次の2つの条件を確認する必要があります。 1)テーブルの行数は0です 2)テーブル列が1つ存在します。チェックする方法PL/SQLでクエリを実行する前に、列が存在し、テーブルの行数が集計されている場合
だから、誰かがすることができ、次のように私は手順を書いた私の要件に基づか
DECLARE
rowCount INT;
column_not_exists exception;
pragma exception_init (column_not_exists , -00904);
BEGIN
SELECT count(*) INTO rowCount FROM Settings;
IF (rowCount = 0) THEN
Insert into Settings (ID,PROCESSID,AREA) select ID,PROCESSID,AREA from POINT WHERE CLASSNAME = 'ENDPOINT' and PROCESSID IS NOT NULL;
END IF;
exception WHEN column_not_exists THEN NULL;
END;
/
しかし、どういうわけか、例外が処理されず、まだ私はログに
PL/SQL: ORA-00904: "PROCESSID": invalid identifier
ORA-06550: line 8, column 1:
PL/SQL: SQL Statement ignored
をエラーメッセージを見ることができます両方の条件を確認するために私をここに助けてください。
行数については、dba_tab_statisticsを使用できます(行数が重要な場合は適切ではない場合は、最後のデータベース収集統計からの表に関する統計情報が表示されます)。列については、dba_tab_columnsからテーブルの列をクエリし、その列の存在を確認できます。 –
あなたのデータベースからポイント(テーブル)構造を拡張することができます! –
ora-00904はコンパイル時例外です。例外セクションは実行時例外をトラップします。簡単に言えば、ora-00904は静的SQLに対してはトラップできませんが、動的SQLに対してはトラップできます。とにかく静的SQLの例外を処理する意味がありません。データを挿入/選択するテーブルの構造を知っておく必要があります。 –