【问题标题】:How to pass ENUM variable as input for POSTGRESQL functions如何将 ENUM 变量作为 POSTGRESQL 函数的输入传递
【发布时间】:2020-02-04 15:08:16
【问题描述】:

我在 MySQL 中有一个可以正常工作的函数:

CREATE  PROCEDURE `Accounts_Active`(IN_DeptName VARCHAR(255), IN_Src ENUM('TRAINING','ELZA'))
BEGIN
END$$
DELIMITER ;

但是当转换为 PostgreSQL 时:

CREATE or replace FUNCTION Accounts_Active(IN_DeptName VARCHAR(255), IN_Src ENUM('TRAINING','ELZA'))
RETURNS void
AS
$$
BEGIN
      RAISE INFO '    ';
END;
$$ LANGUAGE plpgsql;

出现以下错误:

ERROR:  type enum does not exist
SQL state: 42704

任何关于如何修复此错误的指导将不胜感激。

【问题讨论】:

  • 您没有动态定义枚举。你需要已经定义它,然后在你的函数中你可以说in_src your_enum_type
  • 您好,欢迎来到 Stack Overflow。正如 404 所说,您需要先定义您的枚举,然后才能使用它。查看 PostgreSQL 文档 postgresql.org/docs/9.1/datatype-enum.html

标签: postgresql function enums input-parameters


【解决方案1】:

创建枚举数据类型:

CREATE TYPE atype AS ENUM ('TRAINING', 'ELZA');

然后你可以将它作为函数参数使用:

CREATE FUNCTION Accounts_Active(
   IN_DeptName text,
   IN_Src atype
) RETURNS void
...

使用枚举时,请记住,您可以向此类数据类型添加值,但永远不能再次删除它们。通常你会更好地使用像text 这样的字符串数据类型,但当然你必须编写代码来检查输入的有效性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2022-06-10
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多