Postgresql 我如何在postgres中返回一点
我是postgres的新手,正在尝试设置一个返回位的函数 我一直在犯错误 函数的最终语句必须是SELECT或INSERT/UPDATE/DELETE 返回 我明白 这是密码Postgresql 我如何在postgres中返回一点,postgresql,Postgresql,我是postgres的新手,正在尝试设置一个返回位的函数 我一直在犯错误 函数的最终语句必须是SELECT或INSERT/UPDATE/DELETE 返回 我明白 这是密码 CREATE OR REPLACE FUNCTION "f"(...) RETURNS bit AS DO $$ Begin IF someStuff THEN 0; //also tried select 0 //also tried return 0
CREATE OR REPLACE FUNCTION "f"(...)
RETURNS bit AS
DO $$
Begin
IF someStuff
THEN
0; //also tried select 0 //also tried return 0
ELSE
1; //also tried select 1 //also tried return 0
END IF;
0; //also tried select 0 //also tried return 0
END $$
语法哪里出错了?有几个错误:
- 函数定义中的
错误DO
- 您缺少该语言的规范
- 在PL/pgSQL中,使用
返回函数的结果return
CREATE OR REPLACE FUNCTION f(some_value integer)
RETURNS bit AS
$$
Begin
IF (some_value = 1)
THEN
return 0;
ELSE
return 1;
END IF;
END $$
language plpgsql
但您应该使用布尔值
而不是位来返回真/假标志:
CREATE OR REPLACE FUNCTION f(some_value integer)
RETURNS boolean AS
$$
Begin
IF (some_value = 1)
THEN
return false;
ELSE
return true;
END IF;
END $$
language plpgsql
有几个错误:
- 函数定义中的
错误DO
- 您缺少该语言的规范
- 在PL/pgSQL中,使用
返回函数的结果return
CREATE OR REPLACE FUNCTION f(some_value integer)
RETURNS bit AS
$$
Begin
IF (some_value = 1)
THEN
return 0;
ELSE
return 1;
END IF;
END $$
language plpgsql
但您应该使用布尔值
而不是位来返回真/假标志:
CREATE OR REPLACE FUNCTION f(some_value integer)
RETURNS boolean AS
$$
Begin
IF (some_value = 1)
THEN
return false;
ELSE
return true;
END IF;
END $$
language plpgsql
如果您想使用plpgsql,请按照a_horse的答案执行,但如果您不需要plpgsql,请在sql中执行:
create or replace function f(some_value integer)
returns boolean as $$
select some_value = 1;
$$
language sql;
如果该函数是来自的函数,则该函数将执行以下操作:
create or replace function isPersonQualifiedForJob(pid integer, jid)
returns boolean as $$
select exists (
select 1
from
getskillsforjob(jid) j
inner join
getskillsforperson(pid) p on j.skillid = p.skillid
)
$$
language sql;
检查
是否存在
比计数快得多,因为它足以找到第一个匹配项。如果要使用plpgsql,请按照a_horse的答案执行,但如果不需要plpgsql,请在sql中执行:
create or replace function f(some_value integer)
returns boolean as $$
select some_value = 1;
$$
language sql;
如果该函数是来自的函数,则该函数将执行以下操作:
create or replace function isPersonQualifiedForJob(pid integer, jid)
returns boolean as $$
select exists (
select 1
from
getskillsforjob(jid) j
inner join
getskillsforperson(pid) p on j.skillid = p.skillid
)
$$
language sql;
检查
是否存在
比计数快得多,因为它足以找到第一个匹配项。甚至更好,但我认为模糊的something
“需求”将变得更复杂。@a_马我认为我找到了something,如果是这样,sql版本仍然足够。请参阅更新。更好,但我认为模糊的something
“需求”将变得更复杂。@a_马我认为我找到了something,如果是这样,sql版本仍然足够。请参阅更新。检查我的更新答案。检查我的更新答案。