2013-10-09 49 views
4

我使用PostgreSQL 9.3並寫了如下的功能:PostgreSQL的分配選擇查詢變量的函數

create or replace function test(building text,floor text) returns void as $$ 
    Declare 
    id integer; 
    num integer := 0; 
    Begin 

    num=num+100 

    id :=select to_number(
      (select 
       (select code from buildings where name=building) || floor 
       || (select num::text)),'99999999' 
    ); 

    update table set col1=id; 

    End; 
    $$ 
    language plpgsql; 

我想到的是,我的id變量將從select to_number(...)分配一個數值example: 12502100查詢。

但是我得到了下面的錯誤

ERROR: syntax error at or near ":=" 
LINE 10: source :=(select code from buildings where name='I3') 

我怎麼可以指定查詢結果(有一些字符串操作)爲變量ID?

我也用Select Into id...方法失敗。

回答

2

您不需要使用SELECT進行功能評估。

id := to_number((SELECT code FROM buildings WHERE name = building) 
                 || floor || num::text, 
       '999999999'); 

另一種可能性(通常是更好的)表達列表(結果字段列表)使用功能

id := (SELECT to_number(code || floor || num::text, '99999999') 
      FROM buildings WHERE name = building) 

使用SELECT只有當你需要查詢到的數據,而不是函數或變量的評價!

+0

你的第二種方法給了我錯誤「不匹配的括號在或接近」)「」,第一種方法正在工作。 – Xianlin

+0

@Xianlin:對不起,修正了一個括號 –

+0

你怎麼用多個變量和一個陳述來做到這一點?即你想用(SELECT field1,field2 FROM buildings WHERE name = building)填充var1和var2; var1應該包含field1結果,var2應該包含field2結果。 – thames