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

手順のINパラメータからVARRAYの値を取得するにはどうすればよいですか

    プロシージャdynamic_query_buildを使用して匿名ブロックを作成しました。 VARCHAR2変数をvarrayに分割するコードを追加しました。質問の鍵は次の行だと思います--plan_sku_id.EXTEND(); varrayを動的に拡張できますが、定義された最大値(この場合は-999)に達するまでです。 。

    DECLARE
    vr_plan_sku_id varchar2(200) := '5863314,5863315';
    PROCEDURE dynamic_query_build(
        vr_plan_sku_id IN VARCHAR2 )
    IS
    type plan_sku_id_array IS VARRAY(999) OF VARCHAR2(5000);
    plan_sku_id plan_sku_id_array;
    total           INTEGER;
    
    position PLS_INTEGER := 0;
    last_position PLS_INTEGER := 1;
    tmp VARCHAR2(5000);
    counter PLS_INTEGER := 1;
    BEGIN
      plan_sku_id := plan_sku_id_array();
      LOOP
        position := INSTR(vr_plan_sku_id, ',', last_position);
        IF position > 0 THEN
          tmp := SUBSTR(vr_plan_sku_id, last_position, position - last_position);
          last_position := position + 1;
        ELSE
          tmp := SUBSTR(vr_plan_sku_id, last_position);
        END IF;
        plan_sku_id.EXTEND();
        plan_sku_id(counter) := tmp;
        counter := counter + 1;
        EXIT WHEN position = 0 OR counter > 10;
      END LOOP;
      total          := plan_sku_id.count;
      FOR i          IN 1 .. total
      LOOP
        dbms_output.put_line(plan_sku_id(i));
      END LOOP;
    EXCEPTION
    WHEN OTHERS THEN
      raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
    END dynamic_query_build;
    BEGIN
       dynamic_query_build(vr_plan_sku_id);
    END;
    /
    


    1. コントローラー経由で返されるcsv形式のRailsrawクエリ

    2. SQLデータベースを簡単に復元–ステップバイステップガイド

    3. 1年の毎月のレコードをカウントします

    4. BadStoreでのSQLインジェクション