您不必编写存储过程;您只需告诉 IDS NULL 是什么类型。假设您没有使用 IDS 7.31(它不支持任何强制转换符号),您可以编写:
SELECT NULL::INTEGER FROM dual;
SELECT CAST(NULL AS INTEGER) FROM dual;
而且,如果您没有dual表格(您可能没有),您可以执行以下操作之一:
CREATE SYNONYM dual FOR sysmaster:"informix".sysdual;
'sysdual' 表是最近才添加的(IDS 11.10,IIRC),所以如果您使用的是旧版本,它将不存在。以下适用于任何版本的 IDS - 这是我使用的。
-- @(#)$Id: dual.sql,v 2.1 2004/11/01 18:16:32 jleffler Exp $
-- Create table DUAL - structurally equivalent to Oracle's similarly named table.
-- It contains one row of data.
CREATE TABLE dual
(
dummy CHAR(1) DEFAULT 'x' NOT NULL CHECK (dummy = 'x') PRIMARY KEY
) EXTENT SIZE 8 NEXT SIZE 8;
INSERT INTO dual VALUES('x');
REVOKE ALL ON dual FROM PUBLIC;
GRANT SELECT ON dual TO PUBLIC;
习惯上,如果您要从 Systables 中 SELECT 以获取单行,则应包括 ' WHERE tabid = 1'; 这是 Systables 本身的条目,如果缺少它,您的 SELECT 语句确实返回任何数据这一事实是您最不麻烦的事情。(不过,我从未将其视为错误。)