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

JavaのVarargsに相当するOracle

    少なくとも3つのオプションがあります:

    1. (標準)は、プロシージャパラメータとして連想配列を使用します
    2. 「十分な」数のオプションの仮パラメータを定義する
    3. 区切り文字が定義された単一のvarcharパラメータを使用する

    サンプルコード1。)

    TYPE t_map IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(20);
    
    CREATE OR REPLACE PROCEDURE demo_1 ( vararg IN t_map ) IS
    BEGIN
       /* whatever */
       NULL;
    END demo_1;
    
    /* ... somewhere else ... */
    my_var t_map;
    
    my_var('first') := 'this';
    my_var('next')  := ' is a ';
    my_var('last')  := 'demo';
    
    demo_1 ( my_var );
    /* ... */
    

    サンプルコード2.)(最大5つのパラメーター)

    CREATE OR REPLACE PROCEDURE demo_2 (
          vararg1 IN  VARCHAR2 DEFAULT NULL
        , vararg2 IN  VARCHAR2 DEFAULT NULL
        , vararg3 IN  VARCHAR2 DEFAULT NULL
        , vararg4 IN  VARCHAR2 DEFAULT NULL
        , vararg5 IN  VARCHAR2 DEFAULT NULL
    ) IS
    BEGIN
       /* whatever */
       NULL;
    END demo_2;
    
    /* ... somewhere else ... */
    demo_2 ( 'this', ' is a ', 'demo' );
    /* ... */
    

    サンプルコード3。)(特殊文字は';'-ペイロードデータ内で発生してはなりません)

    CREATE OR REPLACE PROCEDURE demo_3 (
          vararg IN  VARCHAR2
    ) IS
       l_arg2 VARCHAR2(50);
       l_arg5 VARCHAR2(50);
    BEGIN
       l_arg2 := SUBSTR(REGEXP_SUBSTR(vararg, ';[^;]*', 1, 2), 2);
       l_arg5 := SUBSTR(REGEXP_SUBSTR(vararg, ';[^;]*', 1, 5), 2);
       /* whatever */
    END demo_3;
    
    /* ... somewhere else ... */
    demo_3 ( ';this; is a ;demo;;really!;' );
    /* ... */
    


    1. PDFファイルをMySQLに保存する

    2. 特にPython2.7のcentosにMySQLdbをインストールする

    3. SQL ServerのFORMAT()でサポートされているカスタムの日付/時刻形式の文字列

    4. mysql_secure_installationを使用する目的は何ですか?