学習目的でダミーデータベースを作成しましたが、重複したレコードをテーブルの1つに意図的に作成しました。いずれの場合も、重複したレコードの1つにLatest = 'Y'、もう1つのレコードに 'N'というフラグを付けたいとし、すべてのレコードに対してLatestフラグを 'Y'にします。計算値を使用してPL SQLで列を更新するには
それはと言う私は、私のすべてのレコードを通過するPLSQLを使用しようとしましたが、私は(そのA重複して記録することを言うだろう)以前に計算した値を使用しようとすると:
ORA-06550:行20、コラム17: PLS-00201:識別子 'COUNTER' ここ
を宣言する必要がありますが、私が使用しようとする文は次のとおりです。
DECLARE CURSOR cur IS SELECT order_id, order_date, person_id, amount, successfull_order, country_id, latest, ROWCOUNT AS COUNTER FROM (SELECT order_id, order_date, person_id, amount, successfull_order, country_id, latest, ROW_NUMBER() OVER (PARTITION BY order_id, order_date, person_id, amount, successfull_order, country_id ORDER BY order_id, order_date, person_id, amount, successfull_order, country_id) ROWCOUNT FROM orders) orders FOR UPDATE OF orders.latest; rec cur%ROWTYPE; BEGIN FOR rec IN cur LOOP IF MOD (COUNTER, 2) = 0 THEN UPDATE orders SET latest = 'N' WHERE CURRENT OF cur; ELSE UPDATE orders SET latest = 'Y' WHERE CURRENT OF cur; END IF; END LOOP; END;
私はPLSQLに新しいですので、私は変更してみました私がここに見つけた文: http://www.adp-gmbh.ch/ora/plsql/cursors/for_update.html
私は私の声明で何を変えるべきですか、あるいは別のアプローチをとるべきですか?
ご回答ありがとうございます。 Botond
あなたがで、 'MODのようなカーソルの参照から、私は回避策を使用(rec.COUNTER、2)' –