2013-03-23 151 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