2016-05-26 11 views
0

を印刷すると、私は、単純なSQLスクリプトを持っていると言うことができます。したがって、この機能性のようなもの:SQL:</p> <pre><code>UPDATE my_table SET data = new_data WHERE my_table.data IS NULL; </code></pre> <p>私はどこUPDATEコマンドで更新することをそのidを印刷したいと思います:UPDATEコマンドから

UPDATE my_table 
SET data = new_data, RAISE NOTICE 'Updated %', my_table.id 
WHERE my_table.data IS NULL; 

これは可能ですか?私はPostgreSQLを使用しています。

+0

IDを返し、印刷しません。印刷手段とは、クライアントにテキストメッセージを送信することです。 –

+0

いいえ、私は自分のコードをデバッグしていますので、私はそれらを印刷したいと思います - 通常はスクリプトからRAISE NOTICEを使用して同じ方法で行います。 – Arenlind

答えて

2

私はこのようなものを思いついた。

DO language plpgsql $$ 
DECLARE _id bigint; 
BEGIN 
    FOR _id IN 
    WITH up AS (
     UPDATE my_table 
     SET data = new_data 
     WHERE data IS NULL 
     RETURNING id) 
    SELECT id from up 
    LOOP 
     RAISE NOTICE 'Updated %', _id; 
    END LOOP; 
END 
$$; 

これはちょっと面倒ですが、あなたにはうってつけです。

まず、RAISE NOTICEは、hereのようにラップされる必要があります。私は、複数の行(...RETURNING id)を変数に格納する方法を見つけられませんでした。これは現在のバージョンでは不可能かもしれません。だから私は選択肢に自分自身が必要としているRAISEを提供するアップデートをフォローするのです。

+0

完璧な作業 - 多くのおかげで、maxik !!! – Arenlind

1

UPDATEステートメントのRETURNING句を使用して、更新された各行から値を戻すことができます。ドキュメントの例から:

UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT 
    WHERE city = 'San Francisco' AND date = '2003-07-03' 
    RETURNING temp_lo, temp_hi, prcp; 

これは、更新された温度を返します。あなたのケースでは

あなたは試みることができる:あなたが更新された行のIDを返すようにしたい場合は

UPDATE my_table 
SET data = new_data 
WHERE my_table.data IS NULL 
RETURNING id; 
+0

これは私の質問に答えることはできません:更新されたIDをどのように印刷するのですか? – Arenlind

0

を、その後の更新については、次のように

をお試しください:挿入のために

UPDATE my_table SET col2 = val2 WHERE col1 = val1 RETURNING ID; 

を:

INSERT INTO my_table(col2)values(val2)RETURNING ID;

+0

これは私の質問に答えることはできません:更新されたIDをどのように印刷しますか? – Arenlind

関連する問題

 関連する問題