【发布时间】:2012-06-01 06:09:28
【问题描述】:
昨天我们有一个 PostgreSQL 数据库升级到版本 9.1.3。我们以为我们已经测试并准备好了所有东西,但是我们错过了一个功能。它返回一个像这样的表类型:
CREATE OR REPLACE FUNCTION myfunc( patient_number varchar
, tumor_number_param varchar, facility_number varchar)
RETURNS SETOF patient_for_registrar
LANGUAGE plpgsql
AS
$body$
BEGIN
RETURN QUERY
SELECT cast(nfa.patient_id_number as varchar),
...
我只给出选择的第一列,因为那是发生错误的地方。在今天之前,这个函数运行良好,但现在它给出了这个错误:
错误:查询结构与函数结果类型不匹配
详细信息:返回的类型字符变化与预期类型不匹配 第 1 列中的字符变化(8)。其中:PL/pgSQL 函数 “getwebregistrarpatient_withdeletes”第 3 行,返回查询 [SQL 状态=42804]
nfa.patient_id_number 列是文本,正在为patient_for_registrar 中的patient_id_number 列转换,即varchar(8)。在阅读了一些内容后,我认为问题在于从文本转换时未指定列长度。但问题是我尝试了各种子字符串组合来解决这个问题,但都没有解决问题:
substring(cast(nfa.patient_id_number as varchar) from 1 for 8),
cast(substring(nfa.patient_id_number from 1 for 8) as varchar),
cast(substring(nfa.patient_id_number from 1 for 8) as varchar(8)),
有人指点一下吗?
【问题讨论】:
标签: postgresql types plpgsql varchar postgresql-9.1