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

文字列の配列をプロシージャに渡し、INを使用してWHERE句で使用する

    配列は、パッケージで宣言されたPLSQL型ではなく、SQLで直接作成されたSQLオブジェクト型である必要があります。

    SQL> CREATE OR REPLACE TYPE t_strarray IS TABLE OF VARCHAR2(30);
      2  /
    Type created.
    
    SQL> CREATE TABLE mytable (field1 VARCHAR2(30));
    Table created.
    
    SQL> INSERT INTO mytable VALUES ('A');
    1 row created.
    
    SQL> INSERT INTO mytable VALUES ('D');
    1 row created.
    
    SQL> CREATE OR REPLACE PROCEDURE getstuff(p_list IN t_strarray,
      2                                       io_cursor OUT SYS_REFCURSOR) IS
      3  BEGIN
      4     OPEN io_cursor FOR
      5        SELECT *
      6          FROM mytable
      7         WHERE mytable.field1 IN (SELECT COLUMN_VALUE FROM TABLE(p_list));
      8  END;
      9  /
    Procedure created.
    
    SQL> VARIABLE cc REFCURSOR;
    SQL> EXEC getstuff (t_strarray('A', 'B', 'C'), :cc);    
    PL/SQL procedure successfully completed.
    
    SQL> print cc
    
    FIELD1
    ------------------------------
    A
    



    1. クエリをMySqlからSqliteに変換します

    2. WEEKOFYEAR(NOW())vs WEEK( '2018-05-1')-現在の日付

    3. 複数のパラメーターを持つPHPisset()

    4. PostgreSQLパート2の列挙列に基づいてすべての行を合計するにはどうすればよいですか?