昨天我们有一个 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 行,位于 RETURN QUERY [SQL 状态 = 42804 ]
该列nfa.patient_id_number
是文本,并且正在为该列转换patient_id_number
为. 在阅读了一些内容后,我认为问题在于从文本转换时未指定列长度。但问题是我尝试了各种子字符串组合来解决这个问题,但没有一个能解决问题:patient_for_registrar
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)),
有没有人有任何指示?