【发布时间】:2014-02-13 17:17:49
【问题描述】:
我已经创建了名为 t_user_type 的复合类型:
CREATE TYPE t_user_type AS
(uid integer,
firstname character varying,
lastname character varying,
companyname character varying,
email character varying,
sip_phone integer);
...我需要将字符串转换为该类型,所以我这样做了
SELECT '(11423, FirstName, LastName, Company, email@gmail.com, 204)' :: t_user_type;
一切都很好。没有错误,什么都没有。但是当我使用过程做同样的事情时,我得到这个错误:Invalid input syntax for integer: "(11423," FirstName"," LastName"," Company"," email@gmail.com", 204) ".
这是我的程序:
CREATE OR REPLACE FUNCTION change_type(p_user character varying)
RETURNS void AS
$BODY$DECLARE
v_user_type t_user_type;
BEGIN
SELECT p_user :: t_user_type INTO v_user_type;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION change_type(character varying)
OWNER TO postgres;
这是使用该过程的查询:
SELECT change_type(
'(11423, FirstName, LastName, Company, email@gmail.com, 204)');
谁能告诉我我做错了什么?
【问题讨论】:
-
你能同时添加你使用的 Postgres 版本吗?
-
我使用的是 9.3 和 pgAdmin 1.18.0。
标签: postgresql stored-procedures casting