sql
  • postgresql
  • sql-update
  • plpgsql
  • 2017-05-05 3 views 0 likes 
    0

    誰かが私に次のコードの問題点を指摘できますか? それは完全に合法構文のように見えますが、私はそれを実行したときに私が手:更新から変数を設定しようとしても動作しません

    ERROR: syntax error at or near "conctest" 
    LINE 7: ret_id := (update conctest set id=id+1 where name = 'Billy ... 
             ^
    ********** Error ********** 
    
    ERROR: syntax error at or near "conctest" 
    SQL state: 42601 
    Character: 66 
    

    ブロークン・コード:

    DO $$ 
    
        declare ret_id integer; 
    
    begin 
    
        ret_id := (update conctest set id=id+1 where name = 'Billy Bob' returning id); 
    
        DROP TABLE IF EXISTS tmpTable; 
        CREATE TEMPORARY TABLE tmpTable AS 
         select ret_id; 
    
    END $$; 
    
    select * from tmpTable; 
    

    これは動作します:

    DO $$ 
    
        declare ret_id integer; 
    
    begin 
    
        update conctest set id = id + 1 where name = 'Billy Bob'; 
        ret_id := (select id from conctest where name = 'Billy Bob'); 
    
        DROP TABLE IF EXISTS tmpTable; 
        CREATE TEMPORARY TABLE tmpTable AS 
         select ret_id; 
    
    END $$; 
    
    select * from tmpTable; 
    

    ところでを、私はアップデートをコピー句を作業SQLクエリウィンドウから取得し、手動で" returning id"を追加して、そこに奇妙な文字がないようにします。 どうしたの?

    TVMIA

    アダム。 docsあたりとして

    答えて

    0

    UPDATE ... [STRICT]ターゲットに表現を返します。

    ではなく intoを使用してみてください:

    t=# create table s111(i int); 
    CREATE TABLE 
    Time: 37.521 ms 
    t=# insert into s111 select 1; 
    INSERT 0 1 
    Time: 1.016 ms 
    t=# do 
    $$ 
    declare _i int; 
    begin 
    update s111 set i =2 returning i into _i; 
    raise info '%',_i; 
    end; 
    $$ 
    ; 
    INFO: 2 
    DO 
    Time: 0.944 ms 
    
    +0

    おかげで、バオ - 作品。私はhttps://www.postgresql.org/docs/current/static/sql-update.htmlでこの構文を見ることができません。私はそれが "output_expression"の下に含意されていると思うけど、まだまだ秘密です。あなたがそれを知らないなら、あなたはクリークの上にいます。 –

    +0

    fair point - 必要なドキュメントへのリンクを追加しました。変数に値を代入するのはplpgsqlの部分で、リンクはSQLの更新コマンドです –

    関連する問題