web-dev-qa-db-ja.com

pgadmin sqlクエリにパラメーター値を追加する方法

Pgadmin3では、パラメーター化されたクエリを使用したいと思います(デバッグを高速化するには、phpファイルからクエリをコピーして貼り付けます)。しかし、$1$2...パラメータの値を追加するオプションが見つかりませんでした。出来ますか?

これは、ループで構築しているクエリで、 ここ からのNULLテストの提案に従います。

SELECT EXISTS(SELECT 1
              FROM tax
              WHERE (addby=$1 or addby<>$1)
                    AND (adddate=$2 or adddate<>$2)
                    AND ($3 IS NULL AND nome IS NULL OR nome=$3)
                    AND ($4 IS NULL AND rank IS NULL OR rank=$4)
                    AND ($5 IS NULL AND pai IS NULL OR pai=$5)
                    AND ($6 IS NULL AND valido IS NULL OR valido=$6)
                    AND ($7 IS NULL AND sinonvalid IS NULL OR sinonvalid=$7)
                    AND ($8 IS NULL AND espec IS NULL OR espec=$8)
                    AND ($9 IS NULL AND public IS NULL OR public=$9)
       );

手作業ですべてのパラメーターを置き換えるのは面倒で、エラーが発生しやすく、おそらく(私はそう思いますが)不要です。

前もって感謝します。

16
Rodrigo

私は2つの方法しか知りません。

最初は PREPARED STATEMENT (PostgreSQLマニュアルの後の例):

PREPARE usrrptplan (int) AS
    SELECT * FROM users u, logs l
    WHERE u.usrid=$1 AND u.usrid=l.usrid AND l.date = $2;

EXECUTE usrrptplan(1, current_date);

PREPAREは準備済みステートメントを作成します。 PREPAREステートメントが実行されると、指定されたステートメントが解析、分析、および再書き込みされます。続いてEXECUTEコマンドが発行されると、準備されたステートメントが計画され、実行されます。

準備されたステートメントはパラメーターをとることができます。パラメーターは実行時にステートメントに代入されます。準備済みステートメントを作成するときは、$ 1、$ 2などを使用して、位置によってパラメーターを参照します。

準備されたステートメントは、現在のデータベースセッションの間だけ持続します。セッションが終了すると、準備済みステートメントは忘れられるため、再度使用する前に再作成する必要があります。

2番目は、「検索して置換」することです$1$2、..などを適切な値で指定します。しかし、これは避けたいものです。

20

DBeaverでは、コードから行うのと同じようにクエリでパラメーターを使用できるため、これは機能します。

select * from accounts where id = :accountId

クエリを実行すると、DBeaverは:accountIdの値を尋ね、クエリを実行します。

0
The Coder