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

テーブル変数は1つの値のみで埋められます

    BULK COLLECTを使用する およびFORALL バルクインサートとより良いパフォーマンスのために。 FORALL ステートメントを使用すると、毎回コンテキストスイッチを必要とせずに、コレクション内の各行に対してDMLを実行できるため、全体的なパフォーマンスが向上します。

    CREATE OR REPLACE PROCEDURE get_attributes (
        p_auth_use_id  IN   NUMBER,
        p_category_id  IN   NUMBER,
        p_version_id   IN   NUMBER,
        p_result       OUT  types.cursor_type
    ) IS
        v_numbers sys.odcinumberlist := NULL;
    BEGIN 
        SELECT s.id
        BULK COLLECT --> Bulk collect all values
        INTO v_numbers
        FROM inv_srv s
            start with s.parent_srv_id in (
              SELECT ID FROM INV_SRV 
              WHERE SRV_CATEGORY_ID IN 
                (
                    SELECT id
                    FROM   inv_srv_category
                    START WITH parent_category_id = P_CATEGORY_ID
                    CONNECT BY PRIOR id = parent_category_id
                ) 
                OR SRV_CATEGORY_ID = P_CATEGORY_ID)
            connect by prior s.id = s.parent_srv_id;
    
            FORALL i IN 1..v_numbers.COUNT   
            INSERT INTO your_table VALUES v_numbers ( i ); --> Bulk insert
    
    END;
    


    1. search_pathに関してデフォルト値の式関数はいつ/どのようにバインドされますか?

    2. Djangoチャンネル入門

    3. PHPとMySQLとHighchart

    4. Hibernate4.3.5はOracle10gデータベースで動作しません