如何使用以下代码在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
请帮助解决该问题
答案 0 :(得分:2)
http://php.net/manual/en/migration71.deprecated.php和IF
需要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));