我的輸入參數是姓氏和名字。我需要檢查表格作者是否已經存在姓氏和名字。所以我需要在表格作者的colums lastname和firstname上做一個SELECT語句,並將結果存儲在一個變量中。如何進行循環proceed..if名稱已經存在,它dispalys消息,否則它增加了新的名字,以表sql循環結果集
請幫
我的輸入參數是姓氏和名字。我需要檢查表格作者是否已經存在姓氏和名字。所以我需要在表格作者的colums lastname和firstname上做一個SELECT語句,並將結果存儲在一個變量中。如何進行循環proceed..if名稱已經存在,它dispalys消息,否則它增加了新的名字,以表sql循環結果集
請幫
你並不需要循環的結果要做到這一點,一個簡單
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。
我不明白部分'DECLARE x記錄'..我需要聲明一個名爲x在DECLARE部分中有類型記錄的變量嗎? – 2013-03-23 07:54:33
是的,這是完全正確的。請注意,文檔中可能有像'author%ROWTYPE'這樣的示例,它比'record'不那麼一般,但這個想法是相似的。在這種情況下使用'record'。 – kputnam 2013-03-23 08:18:21
我懷疑你不需要這個循環。你使用的是什麼RDBMS? – Kane 2013-03-23 06:56:30
這是我的代碼: 創建或替換功能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
我使用pgAdmin 3..is,你需要知道什麼? – 2013-03-23 06:59:14