DECLARE
CURSOR c1
IS
SELECT view_name
FROM all_views
WHERE owner = 'DBA_A'
AND view_name LIKE 'IRV_%'
OR view_name LIKE 'RD_%'
ORDER BY view_name;
BEGIN
FOR i IN c1
LOOP
FOR ii IN ('select * FROM DBA_A.' || i.VIEW_NAME || ' minus select * FROM DBA_B.' || i.VIEW_NAME)
LOOP
-- I plan to put the results from the select in the FOR ii loop in a listAgg. I think I can figure that out.
dbms_output.put_line(listAgg);
END LOOP; -- for ii
END LOOP; -- for i
END;
次のエラーが発生します。おそらく私が探求しているシンタックスの構文ですが、私がiiループでやろうとしているのは正気に見えますか?私はlistAgg関数の使い方を工夫しなければなりません。pl sql select * from owner.view1マイナスselect * from forループ内のカーソルとしてowner2.view1
ありがとうございます。
END LOOPでエラーが生成されました。 - II
PLS-00103のために次のいずれかを期待したときにシンボル "END" を検出しました:
DBMS_OUTPUT.PUT_LINEが生成され、適切な選択を示しています。再度、感謝します。リッチ
ありがとうございますAleksej。テーブル/ビューには多くのフィールドがあります。しかし、私はテーブルではなくビューを比較しようとしています。ビューは2つの別々のスキーマにあります。どちらのスキーマ・オブジェクトもまったく同じです(DBA_AをDBA_Bにコピーしました)。しかし、1つのスキーマで1つのビューの基本表を変更しました。
DBA_B.view1 ...からのselect * from DBA_A.view1 .... minus select *は、ハードコードされたschema.viewの名前でselect/minusをハードコードすると機能します。 selectは、変更されたデータを持つビューの1つの行を返します。ループの中にあるビューのすべての列名を返す方法があると思います。 dbms_output.putline(listAggを使用)を列名のリストと、返された行のデータに対して実行したいとします。
私は十分に明確でない場合は申し訳ありません。あなたのサンプルコードをありがとうございました。あなたの例に基づいて自分のコードを変更し、結果を投稿します。あなたに
は私がカップルに比較したいテーブルを持っていると言う動的なコードにいくつかのヒントを与えるために、あなたの質問を簡素化しようとすると
コードにはいくつか問題がありますが、何をする必要があるのか不明なので、手伝いが難しいです。たとえば、最初のクエリでビューを見つけたとし、マイナスをして5列の10レコードを取得したとします。これらのレコードで何をしたいですか?ダイナミッククエリが返す列を事前に把握していないという事実をどうやって処理できますか?人々があなたを助けるために[mcve]を構築しようとしてください – Aleksej
こんにちは。私はちょうど(任意のコードブロックの外)を選択...マイナス...選択(* select.oracle.viewマイナスselect * owner2.viewでそれを手動でコーディング)私は1つのスキーマの基本テーブルを変更したビューselectはすべての列を含む行を返します。私はちょうどiiループ内に返された行のROWIDを取得し、dbms_output.put_line(ROWID)を実行したい。コードは決してiiループに入りません。私はそれが助けて欲しいありがとうございました! – user3797654
[Dynamic SQL LOOP]の重複している可能性があります(http://stackoverflow.com/questions/21090673/dynamic-sql-loop) – OldProgrammer