如何传递 ENUM 变量作为 POSTGRESQL 函数的输入

dp1*_*212 3 postgresql enums function input-parameters

我在 MySQL 中有一个运行良好的函数:

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

但是当转换为 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;
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

ERROR:  type enum does not exist
SQL state: 42704
Run Code Online (Sandbox Code Playgroud)

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

Lau*_*lbe 7

创建枚举数据类型:

CREATE TYPE atype AS ENUM ('TRAINING', 'ELZA');
Run Code Online (Sandbox Code Playgroud)

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

CREATE FUNCTION Accounts_Active(
   IN_DeptName text,
   IN_Src atype
) RETURNS void
...
Run Code Online (Sandbox Code Playgroud)

使用枚举时,请记住您可以向此类数据类型添加值,但切勿再次删除它们。通常,您最好使用像 之类的字符串数据类型text,但是当然,您必须编写代码来检查输入的有效性。