Postgresql 我如何在postgres中返回一点

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

我是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
        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版本仍然足够。请参阅更新。检查我的更新答案。检查我的更新答案。