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

Oracleのストアドプロシージャに一重引用符で囲まれたvarcharを渡す方法

    文字列ではなくコレクションを渡し、MEMBER OFを使用します INではなく :

    CREATE OR REPLACE TYPE characterlist IS TABLE OF CHAR(1);
    /
    
    CREATE PACKAGE your_package AS
      PROCEDURE countPending(
        pProviderList IN  characterlist
        pCount        OUT INTEGER
      )
      AS
      BEGIN
        SELECT COUNT(*) 
        INTO pCount
        FROM FUND_CHANGE_REQUEST
        WHERE STATUS IN ('PENDING_CHK', 'PEND_2ND_CHK')
        AND PROVIDER  MEMBER OF pProviderList;
      END;
    END;
    /
    

    次に、次のように呼び出すことができます:

    DECLARE
      vCount INTEGER;
    BEGIN
      your_package.countPending(
        characterlist( 'A', 'B' ),
        vCount
      );
      DBMS_OUTPUT.PUT_LINE( vCount );
    END;
    /
    

    値のリストではなく単一の文字列を渡しているので、IN 条件は、PROVIDERかどうかを確認するためのテストです 列は入力文字列全体と完全に一致しますが、想定しているように、引用符で囲まれた区切りリストの各要素とは一致しません。

     WHERE 'A' IN ( q'['A', 'B']' )
    

    どちらの'A'も一致しないため、一致しません q'['A', 'B']'と等しくない (または'''A'', ''B''' )そしてカウントは常にゼロになります。

     WHERE 'A' IN ( 'A', 'B' )
    

    一致しますが、INの式リストには2つの用語があります 状態。



    1. JDBCを使用したSQLServerLocalDBへの接続

    2. 列名がさまざまなデータベースで予約されているキーワードであるかどうかを確認する方法

    3. mysqlはタイムスパン間の行数を選択します

    4. カテゴリとサブカテゴリを表示するにはどうすればよいですか?