2 つのテーブルの完全結合でカーソルを実行しようとしていますが、カーソル内の列へのアクセスに問題があります。
CREATE TABLE APPLE(
MY_ID VARCHAR(2) NOT NULL,
A_TIMESTAMP TIMESTAMP,
A_NAME VARCHAR(10)
);
CREATE TABLE BANANA(
MY_ID VARCHAR(2) NOT NULL,
B_TIMESTAMP TIMESTAMP,
B_NAME VARCHAR(10)
);
2 つのタイムスタンプのいずれかが未来であるテーブル A と B から関連するすべての行を返す完全結合を作成しました。つまり、テーブル APPLE の行に未来のタイムスタンプがある場合、MY_ID の BANANA の行と結合された APPLE から行をフェッチします。私のために働きます。
select * from APPLE a full join BANANA b on a.MY_ID = b.MY_ID where
(
a.A_TIMESTAMP > current_timestamp
or b.B_TIMESTAMP > current_timestamp
);
ここで、結合された各レコードを反復処理して、何らかの処理を行いたいと考えています。1 つのテーブルにのみ存在する列にアクセスできますが、両方のテーブルで同じ列名にアクセスしようとするとエラーが発生します。たとえば。この場合の ID。
create or replace
PROCEDURE testProc(someDate IN DATE)
AS
CURSOR c1 IS
select * from APPLE a full join BANANA b on a.MY_ID = b.MY_ID where
(
a.A_TIMESTAMP > current_timestamp
or b.B_TIMESTAMP > current_timestamp
);
BEGIN
FOR rec IN c1
LOOP
DBMS_OUTPUT.PUT_LINE(rec.A_NAME);
DBMS_OUTPUT.PUT_LINE(rec.A_TIMESTAMP);
DBMS_OUTPUT.PUT_LINE(rec.MY_ID);
END LOOP;
END testProc;
上記のプロシージャをコンパイルすると、次のエラーが発生します。
エラー(16,28): PLS-00302: コンポーネント'MY_ID'を宣言する必要があります
MY_ID 要素にアクセスする方法がわかりません。私はそれがかなり簡単になると確信していますが、私はデータベースプログラミングに不慣れで、それを行う正しい方法を見つけることができませんでした. どんな助けでも大歓迎です。ありがとう