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

複数の選択文で機能するpl/sqlコードブロックを再帰的に作成するにはどうすればよいですか?

    recについて説明していません タイプなので、より独立させる方法の例を示します:

    declare
        type t_rec is record(
            param1 varchar2(30),
            param2 varchar2(30),
            param3 varchar2(30),
            param4 varchar2(30),
            param5 varchar2(30)
            );
        rec t_rec;
        v_tx_cuerpo varchar2(4000);
        
        function f_subst(str varchar2, template varchar2, subst ora_name_list_t) return varchar2
        as
            res varchar2(32767):=str;
        begin
            for i in 1..subst.count loop
                res:=replace(res, replace(template,'%d',i), subst(i));
            end loop;
            return res;
        end;
    begin
        v_tx_cuerpo:='p1:${param1};p2:${param2};p3:${param3};p4:${param4};p5:${param5};';
        v_tx_cuerpo:=f_subst(
                        v_tx_cuerpo,
                        '${param%d}',
                        ora_name_list_t('str1','str2','str3','str4','str5')
                        );
        dbms_output.put_line(v_tx_cuerpo);
    end;
    /
    

    ご覧のとおり、function f_substを作成しました それは3つの引数を取ります:

    • str varchar2 -置換用の入力文字列
    • template varchar2 -置換用の文字列マスク。この例では、${param%d}です。
    • subst ora_name_list_t -これはコレクション TYPE ora_name_list_t IS TABLE OF VARCHAR2(2*(ORA_MAX_NAME_LEN+2)+1)として定義されています 、したがって、置換する文字列をいくつでも指定できます。この例では、str1を配置しました str5へ 。

    したがって、この関数は入力コレクション要素を繰り返し、入力テンプレートマスクに一致するサブストリングをこのコレクションの値に置き換えます。

    結果:

    p1:str1;p2:str2;p3:str3;p4:str4;p5:str5;
    

    そして最後に、元のrecを使用します :

    declare
        type t_rec is record(
            param1 varchar2(30),
            param2 varchar2(30),
            param3 varchar2(30),
            param4 varchar2(30),
            param5 varchar2(30)
            );
        rec t_rec;
        v_tx_cuerpo varchar2(4000);
        
        function f_subst(str varchar2, template varchar2, subst ora_name_list_t) return varchar2
        as
            res varchar2(32767):=str;
        begin
            for i in 1..subst.count loop
                res:=replace(res, replace(template,'%d',i), subst(i));
            end loop;
            return res;
        end;
    begin
        v_tx_cuerpo:='p1:${param1};p2:${param2};p3:${param3};p4:${param4};p5:${param5};';
        rec.param1:='str1';
        rec.param2:='str2';
        rec.param3:='str3';
        rec.param4:='str4';
        rec.param5:='str5';
        
        v_tx_cuerpo:=f_subst(
                        v_tx_cuerpo,
                        '${param%d}',
                        ora_name_list_t(
                            rec.param1,
                            rec.param2,
                            rec.param3,
                            rec.param4,
                            rec.param5
                            )
                        );
        dbms_output.put_line(v_tx_cuerpo);
    end;
    /
    



    1. SQLクエリの結果を組み合わせる

    2. PHPを使用してcsvファイルからデータベースにデータを保存する方法

    3. SQL :(行内の)指定された値を持つ列のリストを検索します

    4. PHP / MySQL:クエリごとに新しい接続を作成しますか?