sql >> データベース >  >> RDS >> Oracle

pl/sqlの更新の選択でSYS_REFCURSURを使用する方法

    sys_refcursor updateでは使用できません 声明。以下に示すように、明示カーソルを使用できます。このように使用します:

        DECLARE
        cursor a_cursor is
          SELECT mytable.VID
          FROM   mytable
          WHERE  ROWNUM <= COUNT FOR UPDATE;
    
        a_id number;
        begin
        OPEN a_cursor;
        loop     
          FETCH a_cursor INTO a_id;          
          exit when a_cursor%notfound; 
    
            UPDATE mytable SET
            ...
            WHERE  VID = a_vid;                   
        end loop;
        COMMIT;
       close a_cursor;
     end;
    

    編集:

    create or replace PROCEDURE get_rows(
                                       a_cursor OUT SYS_REFCURSOR,
                                       a_id IN VARCHAR,
                                       a_count IN NUMBER)
    IS                                   
    cursor a_cur is
      SELECT mytable.VID
      FROM   mytable
      WHERE  ROWNUM <= a_COUNT ;
    
    a_id NUMBER;
    cnumber number;
    BEGIN 
    OPEN a_cur;
    
     LOOP
      FETCH a_cur INTO a_id; 
    
      IF a_cur%notfound THEN
       cnumber := 9999;
      End if;
    
      exit when a_cursor%notfound; 
    
        UPDATE mytable SET
         ...
        WHERE  VID = a_vid;
      END loop;
      COMMIT;    
      CLOSE a_cur;
    
      Open a_cursor for select * from mytable;
    
    end ;
    


    1. TextBoxを使用して名前のDataGridを動的にフィルタリングする

    2. 自動車教習所の予約システムのデータベースモデル。パート1

    3. PostgreSQL8.2でブロックを実行できません

    4. ld:macOS BigSur11.4でのmysql2gemRubyのバンドルインストール中に-lzstdのライブラリが見つかりません