Informix 函数 returns 没有原因

Informix function returns without reason

所以我有以下 informix 过程

CREATE FUNCTION selectSollmandant(INOUT sollmandat SOLLMANDAT_ROW, inkassodatum INT8) RETURNING SMALLINT
DEFINE ret SMALLINT;
LET ret = 0;
trace "Entering select sollmandat " || sollmandat.vers_schein_nr;

PREPARE sollStmt FROM "SELECT s::SOLLMANDAT_ROW FROM  sollmandat s WHERE vers_schein_nr = ? ORDER BY lfdnr desc";

DECLARE _sollmCsr CURSOR FOR sollStmt;
IF SQLCODE != 0 THEN
    CALL print_to_proto("DECLARE letztZahlCsr " || SQLCODE);
    RETURN 0;
END IF;

TRACE "log ===========  1";
OPEN _sollmCsr USING sollmandat.vers_schein_nr;
TRACE "log ===========  2" || SQLCODE;

IF SQLCODE != 0 THEN
    TRACE "log ===========  3" || SQLCODE;  
    CALL print_to_proto("OPEN sollmandat " || SQLCODE);
    RETURN 0;
END IF;
TRACE "sollmandant iban is ===========  4" || SQLCODE;  
WHILE (1=1) LOOP .... end loop and return...

问题是我的函数 returns 在到达 while 循环之前,它从未达到 log2、log 3 或 log 4。

你能帮帮我吗?我没有看到我错过了什么。

感谢您的帮助。

我设法解决了这个问题,但在我开始讨论我是如何做到的之前,我想尝试澄清上面 posted 代码的实际含义。

澄清

好的,所以 SOLLMANDAT_ROW 是我定义的 ROW_TYPE(可以把它想象成一个 struct,类似于存储过程的数据对象)。上面提到的函数是一个很大很大的 UDR 的一部分,我们使用数据行来简化数据操作。该函数应该 select 我的 sollmadant table 中的某行并将该行存储在我自定义的 SOLLMANDAT_ROW.

为了能够将 selected 行存储在 ROW_TYPES 中,该行必须明确转换为特定的行类型,因此语法 SELECT s::SOLLMANDAT_ROW FROM....

实际解决方案

原来是游标相关的问题,你看,在我是运行函数的上下文中,查询的table是一个同义词,我的代码在 OPEN cursor 语句处中断。 为了解决这个问题,我所做的是像这样引用我的行数据:

SELECT ROW([row colums gere ])::SOLLMANDAT_ROW [rest of select statement]

进行此更改后,该函数将正常运行。

我真的不知道为什么 informix 在尝试将来自同义词 table 的行存储到特定自定义行类型时不“喜欢”我的第一个 select 的语法。如果有人能提供解释,我将不胜感激。

希望本文post对其他人有所帮助,感谢您的宝贵时间。