2013-03-23 83 views
-2

我的輸入參數是姓氏和名字。我需要檢查表格作者是否已經存在姓氏和名字。所以我需要在表格作者的colums lastname和firstname上做一個SELECT語句,並將結果存儲在一個變量中。如何進行循環proceed..if名稱已經存在,它dispalys消息,否則它增加了新的名字,以表sql循環結果集

請幫

+0

我懷疑你不需要這個循環。你使用的是什麼RDBMS? – Kane 2013-03-23 06:56:30

+0

這是我的代碼: 創建或替換功能add_details(text,text)返回文本AS $$ DECLARE \t lname別名爲$ 1; \t fname別名爲2美元; \t res text; \t BEGIN \t res:= SELECT姓氏,名字從作者; \t LOOP \t \t IF res.lastname = $ 1 AND res.firstname = $ 16 THEN \t \t RETURN '名稱已經存在'; INSERT INTO author(lastname,firstname)VALUES($ 1,$ 2); \t ELSE \t \t \t END IF; \t END LOOP; \t RETURN'成功'; END $$語言'plpgsql' SELECT add_details('aaaa','rrrrr'); – 2013-03-23 06:57:38

+0

我使用pgAdmin 3..is,你需要知道什麼? – 2013-03-23 06:59:14

回答

1

你並不需要循環的結果要做到這一點,一個簡單

IF EXISTS (
    SELECT * FROM author 
    WHERE firstname = 'Ronald' AND lastname = 'McDonald' 
    ) THEN ... ELSE ... END IF;` 

將是最明智的方法。
不過,如果你還是想知道如何遍歷在PL/pgSQL的記錄,這裏有一個例子:

 
DECLARE x record; 

FOR x IN SELECT first_name, last_name FROM author 
LOOP 
    IF x.firstname = 'Ronald' AND x.lastname = 'McDonald' 
    THEN 
    ... 
    END IF; 
END LOOP; 

更多細節見documentation

+0

我不明白部分'DECLARE x記錄'..我需要聲明一個名爲x在DECLARE部分中有類型記錄的變量嗎? – 2013-03-23 07:54:33

+0

是的,這是完全正確的。請注意,文檔中可能有像'author%ROWTYPE'這樣的示例,它比'record'不那麼一般,但這個想法是相似的。在這種情況下使用'record'。 – kputnam 2013-03-23 08:18:21