sql
  • postgresql
  • sql-update
  • plpgsql
  • 2017-05-05 6 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,

    아담.

    답변

    0

    docs 당 :

    UPDATE ... [STRICT] 목표 INTO 식 RETURNING;

    대신 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

    공정한 점 - 필요한 문서에 대한 링크를 추가했습니다. 변수에 값을 지정하는 것은 plpgsql 부분이고 링크는 SQL update 명령을위한 것입니다. –

     관련 문제

    • 관련 문제 없음^_^