【问题标题】:Postgres | IF statement with OR conditionalPostgres |带有 OR 条件的 IF 语句
【发布时间】:2018-06-26 12:51:30
【问题描述】:

我有一个用于验证传入变量的存储过程。如果变量不是“制造商”或“成员”,那么它应该抛出错误。如果变量是上述两个变量,则应继续正常处理。

以下代码的当前问题是它总是返回 false,因此总是抛出错误,不管变量是 'maker'、'member' 还是其他。

关于我可能在哪里错误地查看我的逻辑结构的任何想法?

CREATE OR REPLACE FUNCTION validate_creator_type (
  "creator_type" VARCHAR(25)         -- $1
) RETURNS VOID AS $$
DECLARE
  _maker VARCHAR(25) := 'maker';
  _member VARCHAR(25) := 'member';
BEGIN

  -- Validate the creator type is allowed
  IF ($1 <> _maker) OR ($1 <> _member) THEN
    RAISE EXCEPTION 'Invalid creator type ---> %', $1
      USING HINT = 'The creator type can only be member or maker';
  END IF;

END $$
SECURITY DEFINER
LANGUAGE plpgsql;

【问题讨论】:

    标签: sql if-statement conditional operand postgrest


    【解决方案1】:

    OR 更改为 AND,您的问题应该消失了

        CREATE OR REPLACE FUNCTION validate_creator_type (
          "creator_type" VARCHAR(25)         -- $1
        ) RETURNS VOID AS $$
        DECLARE
          _maker VARCHAR(25) := 'maker';
          _member VARCHAR(25) := 'member';
        BEGIN
    
          -- Validate the creator type is allowed
          IF ($1 <> _maker) AND ($1 <> _member) THEN
            RAISE EXCEPTION 'Invalid creator type ---> %', $1
              USING HINT = 'The creator type can only be member or maker';
          END IF;
    
        END $$
        SECURITY DEFINER
        LANGUAGE plpgsql;
    

    【讨论】:

    • @BillBensing:或者if ($1 not in (_maker, _member)) then
    猜你喜欢
    • 2019-08-15
    • 2016-10-08
    • 1970-01-01
    • 2014-01-17
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多