PLSQLを使用していて、クエリ結果をSELECTステートメントから配列に保存し、その配列の要素を使用してループしてすべての行を更新したい。以下のコードの問題は、単一行を返すことです。サブクエリは、行に複数の変数を設定しようとしているため、複数の行を返します。この状況で私を助けてもらえますか?
これは私のコードです:
CREATE OR REPLACE PROCEDURE looping IS
BEGIN
FOR rec IN (SELECT IID FROM DATMCCN0)
LOOP
UPDATE DATMCCN0
SET E_NOME = (SELECT I_NOME FROM DAT_CCNCONFIG0 INNER JOIN DATMCCN0 ON DAT_CCNCONFIG0.I_NOME = DATMCCN0.CAPLIC where DATMCCN0.IID = rec.IID)
where IID = rec.IID;
END LOOP;
END;
EXECUTE looping;
回答 2 件
「SELECTステートメントのデータを保存し、UPDATEステートメントでそのデータを使用(ループする)する」という質問に対するリテラルの答えは、次のようなステートメントになります。
UPDATE (SELECT src.E_NOME, dst.I_NOME FROM DAT_CCNCONFIG0 JOIN DATMCCN0 src ON DAT_CCNCONFIG0.I_NOME = scr.CAPLIC JOIN DATMCCN0 dst ON src.IID = dst.IID) SET E_NOME = I_NOME;
ただし、単一行のサブクエリが複数を返すという問題は解決しません。そのためのMT0の答えを見てください。
関連記事
- updateプリペアドステートメントのpdo - : fetchall()が「バッファリングされていないクエリがアクティブです」という例外を引き起こすのはなぜですか?
- 遠隔結合を含む複数の結合を含むMariaDB/MySQLUPDATEステートメント
- 配列エントリを処理し、配列エントリを処理しないPostgresJSONB列選択ステートメント
- プリペアドステートメントとselectステートメントをすべてUNIONすることは可能ですか?
- where条件の動的列を持つselectステートメント
- ネストされたselectステートメントをsequelizeで作成するにはどうすればよいですか?
- Emberのサービスストアのデータを更新するにはどうすればよいですか?
- Oracle SQL:月のすべての終了日を取得するが、月末の1日か2日後の値を比較するselectステートメントを作成します
- Vuexストアの値はコミットせずに更新されます
- Postgresqlの列を無視しながら、Group-byを使用してステートメントを選択します
関連した質問
- ORA-04091:表名が変更されています:子テーブルからのトリガーが親テーブルを更新したい場合
- テーブルEMPが変化しているため、トリガー/関数でエラーが表示されない場合があります
- この問題の解決策を見つけてください。 (PL SQLの場合)--------
- 複数の行への区切り文字付きの2つの列
- テーブルに行を追加するための最も適切なロジックに関するヘルプが必要
- pl/sqlの空の値からNULLを取得できません
- 月と年のSQLクエリ
- Oracleで各従業員の2つの従業員テーブルを列ごとに比較する方法
- pl/sqlテーブルを返す関数
- すべてのテーブルOracle内のすべてのテーブルDMLアクティビティを検索するための動的クエリ
ループは不要で、1つの
MERGE
ですべて実行できます ステートメント(相関クエリが各IID
に対して単一の行を返すと仮定します ):そうでない場合は、次のような単一の行のみを取得する必要があります。