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

一括収集せずにオブジェクトのコレクションを含むOracleオブジェクトを選択する

    ここにはいくつかのオプションがあります。クエリを明示カーソルとして開き、適切なコレクションにフェッチ...バルクコレクションすることができます。 EXECUTE IMMEDIATE ... BULKCOLLECTINTOを使用できます。または、聞きたくないと言うように、DBMS_SQLを使用できます。

    EXECUTE IMMEDIATE ... BULK COLLECTを使用するには、次のようなものを使用します

    CREATE TABLE DATA_TABLE(FIELD1         NUMBER,
                            FIELD2         VARCHAR2(100));
    
    INSERT INTO DATA_TABLE (FIELD1, FIELD2)
      SELECT 1, 'ONE' FROM DUAL UNION ALL
      SELECT 1, 'TWO' FROM DUAL UNION ALL
      SELECT 2, 'THREE' FROM DUAL UNION ALL
      SELECT 2, 'FOUR' FROM DUAL UNION ALL
      SELECT 3, 'LAST' FROM DUAL;
    
    DECLARE
      TYPE typeCol IS TABLE OF DATA_TABLE%ROWTYPE;
      colVals        typeCol;
      strField_name  VARCHAR2(30) := 'FIELD1';
      nField_val     NUMBER := 2;
    
      strQuery       VARCHAR2(4000);
    BEGIN
      strQuery := 'SELECT * FROM DATA_TABLE WHERE ' || strField_name || '=' || nField_val;
    
      DBMS_OUTPUT.PUT_LINE(strQuery);
    
      EXECUTE IMMEDIATE strQuery BULK COLLECT INTO colVals;
    
      FOR i IN colVals.FIRST..colVals.LAST LOOP
        DBMS_OUTPUT.PUT_LINE(i || ': FIELD1=' || colVals(i).FIELD1 || '  FIELD2=' || colVals(i).FIELD2);
      END LOOP;
    END;
    /
    

    ここにdbfiddle

    ドキュメントはこちら(10.1から-より優れた記述それ以降のバージョンIMO)



    1. Oracle12cにはusenameHRはありません

    2. PHPとMySQLの可能な最小および最大の日付

    3. 1行目の''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

    4. 条件に基づいて、別のテーブルの列で列の値を更新します