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

Oracleストアドプロシージャで文字列を使用する

    私があなたの問題を理解している限り、入力としてコンマ区切りの文字列を受け入れ、それを整数のコレクションに分割してから、数値(読み取り:整数)をこのコレクションの値と比較するメソッドが必要です。

    >

    Oracleは、主に3種類のコレクション を提供しています。 - varrays ネストされたテーブル および連想配列 。カンマ区切りの文字列をネストされたテーブルに変換し、それを使用してクエリや比較を行う方法を説明します。

    まず、スキーマでオブジェクトタイプを定義する必要があります。このタイプを使用してクエリを記述できるのは、スキーマレベルで定義した場合のみです。

    CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
    /
    
    CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
    /
    

    次に、次のような関数を定義します。

    FUNCTION comma_to_nt_integer (p_comma_delimited_str IN VARCHAR)
        RETURN entity_id_set IS
        v_table     entity_id_set;
    BEGIN
        WITH temp AS (SELECT TRIM(BOTH ',' FROM p_comma_delimited_str) AS str FROM DUAL)
            SELECT ENTITY_ID(TRIM (REGEXP_SUBSTR (t.str,
                                        '[^,]+',
                                        1,
                                        LEVEL)))
                       str
              BULK COLLECT INTO v_table
              FROM temp t
        CONNECT BY INSTR (str,
                          ',',
                          1,
                          LEVEL - 1) > 0;
    
        RETURN v_table;
    END comma_to_nt_integer;
    

    これで、このタスクに必要なDDLが完了しました。これで、クエリを次のように簡単に記述できます。

    SELECT *
      FROM ..  
     WHERE ...
           AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));
    


    1. pySparkSQLから新しい行IDを取得してリモートmysqldb(JDBC)に書き込みます

    2. Postgresエラー:列IDにnull値-挿入操作中

    3. ストップワードとストップリストを使用してSQLServer全文検索(FTS)を改善する方法

    4. JavaのMySQLスキーマパーサー?