如何将枚举变量作为POSTGRESQL函数的输入传递

如何将枚举变量作为POSTGRESQL函数的输入传递,postgresql,function,enums,input-parameters,Postgresql,Function,Enums,Input Parameters,我在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','E

我在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

请提供有关如何修复此错误的任何指导。

创建枚举数据类型:

CREATE TYPE atype AS ENUM ('TRAINING', 'ELZA');
然后可以将其用作函数参数:

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

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

创建枚举数据类型:

CREATE TYPE atype AS ENUM ('TRAINING', 'ELZA');
然后可以将其用作函数参数:

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

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

您不会动态定义枚举。您需要已经定义了它,然后在您的函数中,您可以在_srcyour _enum _type中说
,您好,欢迎使用堆栈溢出。正如404所说,您需要先定义枚举,然后才能使用它。查看PostgreSQL文档,您不需要动态定义枚举。您需要已经定义了它,然后在您的函数中,您可以在_srcyour _enum _type中说
,您好,欢迎使用堆栈溢出。正如404所说,您需要先定义枚举,然后才能使用它。查看PostgreSQL文档