如何在postgres中创建函数

时间:2019-01-02 12:44:07

标签: sql postgresql

如何使用以下代码在PostgreSQL中创建函数

create table sample(id int primary key)
create table sample2(id int primary key)


create view sampleall
As 
select id from sample
union
select id from sample2 

在为上方表格创建下方功能时

Create FUNCTION CheckFunction (ID INT)
RETURNS BIT AS
$$
BEGIN

    IF EXISTS (SELECT 1 FROM sampleall WHERE id = @ID)
    BEGIN

        RETURN 1
    END




    RETURN 0

END
  $$
 LANGUAGE plpgsql;

CREATE TABLE sample3 (ID INT NOT NULL CONSTRAINT CHK_ID CHECK (dbo.CheckFunction(ID) = 1))

并出现错误

ERROR:  syntax error at or near "BEGIN"
LINE 8:     BEGIN
            ^
********** Error **********

ERROR: syntax error at or near "BEGIN"
SQL state: 42601
Character: 132

请帮助解决该问题

1 个答案:

答案 0 :(得分:2)

http://php.net/manual/en/migration71.deprecated.phpIF需要THEN。此外,参数不能以@为前缀。为了避免参数名称和列名称之间的名称冲突,您应该为参数使用其他名称。一种常见的方法是在参数前加上p_

但是,如果您返回正确的boolean而不是一点点,您的函数就不必要地复杂了,并且可以大大简化:

Create FUNCTION check_function (p_ID INT)
RETURNS boolean AS
$$
  select exists (SELECT 1 FROM sampleall WHERE id = p_id);
$$
LANGUAGE sql;

您的检查约束可以简化为:

CREATE TABLE sample3 (ID INT NOT NULL CONSTRAINT CHK_ID CHECK (check_Function(ID));