テーブルに対してSELECTクエリを実行しようとする簡単な匿名プロシージャを作成しようとしています。問題はこのテーブルの古いバージョンにあり、存在しないカラムはほとんどなく、これらの新しいカラムは新しいバージョンのテーブル構造に導入されました。Oracle PL/SQL:古いバージョンのテーブルには条件付きで列を使用する方法
私はこの新しい列が存在するかどうかを確認しており、唯一の列が存在する場合は条件付きでSELECTクエリを使用しています。しかし、スタティックコンパイルが原因であると思われます。
PL/SQL: ORA-00904: "ERRORTYPE": invalid identifier
どうすれば対処できますか?以下はサンプル手順です
SET SERVEROUTPUT ON;
DECLARE
errorType_column_exists number := 0;
BEGIN
SELECT COUNT(*) INTO errorType_column_exists
FROM ALL_TAB_COLS
WHERE owner = 'DEV'
AND table_name = 'Table1'
AND column_name = 'ERRORTYPE';
IF (errorType_column_exists = 1) THEN
FOR r_row IN (SELECT ErrorMsg
FROM DEV.Table1
WHERE (ErrorType != 'Missing' OR ErrorType IS NULL)
AND ROWNUM <= 100)
LOOP
DBMS_OUTPUT.PUT_LINE(r_row.ErrorMsg);
END LOOP;
END IF;
END;
/
あなたは動的SQLを使用することができます...単純な '即時実行'は問題を解決するでしょう – smnbbrv
いくつかの文脈をしてください。 「このテーブルの古いバージョン」と言うと、正確に何が起きていますか?あなたは様々なヴィンテージのスキーマを持つ複数のデータベースを持っていますか?あなたはすべての構成で実行される1つのコードを書こうとしていますか? – APC
こんにちは、なぜ手順はバージョン間で共通ですか?それぞれのバージョンで異なるプロシージャを実装する必要があります。各手順でそのバージョンの正しい列が使用されるようにします。 – Ramki