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

PostgresqlJDBCテーブルの値のパラメーター

    クライアントから値を渡したいと仮定します 。値がデータベースにすでに存在する場合は、他のより簡単な方法があります。

    composite_typeの配列の構文

    渡すことができるものは、JavaタイプとJDBCタイプ 、および複合値の配列は言うまでもなく、配列型の規定はないようです...

    ただし、いつでもtextを渡すことができます 表現。私は2つの基本的な事実に基づいています:

    1. マニュアル の引用 :

    大胆な強調鉱山。したがって、タイプnumber_with_timeを作成した後 質問で定義されているように、またはシステムに行タイプを自動的に登録する同じ列を持つテーブルを定義している場合は、配列タイプnumber_with_time[]を使用することもできます。 。

    1. textがあります すべての表現 値。

    したがって、number_with_time[]のテキスト表現もあります。 :

    '{"(1,2014-04-20 20:00:00)","(2,2014-04-21 21:00:00)"}'::number_with_time[]
    

    関数呼び出し

    実際の関数呼び出しは、関数で定義された戻り値によって異なります。これは質問に隠されています。

    JDBCでの配列処理による複雑さを回避するには、textを渡します。 表現。 textを使用して関数を作成します パラメータ。

    timestampに「date」という名前を使用するつもりはありません 。このわずかに調整された型定義の操作:

    CREATE TYPE number_with_time AS(
       _num float
     , _ts  timestamp
    );
    

    単純なSQL関数:

    CREATE OR REPLACE FUNCTION myfunc_sql(_arr_txt text)
      RETURNS integer       -- example
      LANGUAGE sql AS
    $func$
       SELECT sum(_num)::int
       FROM   unnest (_arr_txt::number_with_time[]) x
       WHERE  _ts > '2014-04-19 20:00:00';
    $func$;
    

    電話:

    SELECT myfunc_sql('{"(1,2014-04-20 20:00:00)","(2,2014-04-21 21:00:00)"}');
    

    db <> fiddle こちら
    古い sqlfiddle

    デモンストレーション:

    • SQL関数の上
    • PL/pgSQLバリアント
    • 複合型の配列のいくつかの構文バリアント
    • 関数呼び出し

    単純なtextを使用して他の関数と同じように関数を呼び出します パラメータ:

    CallableStatement myProc = conn.prepareCall("{ ? = call myfunc_sql( ? ) }");
    myProc.registerOutParameter(1, Types.VARCHAR);
    // you have to escape double quotes in a Java string!
    myProc.setString(2, "{\"(1,2014-04-20 20:00:00)\",\"(2,2014-04-21 21:00:00)\"}");
    myProc.execute();
    String mySum = myProc.getInt(1);
    myProc.close(); 
    

    PostgresJDBCマニュアルの詳細はこちら

    JDBCを介してテーブル全体を返す例:



    1. MySQLクイックヒント:LENGTHおよびTRIM関数の使用

    2. 結合を実行するときにLIMITにテーブル列の値を使用する

    3. Mysql異なる値に対してCOLを複数回選択します

    4. Woocommerce:製品を1回だけ購入できるユーザー