当前位置:  开发笔记 > 数据库 > 正文

Informix:选择null问题

如何解决《Informix:选择null问题》经验,为你挑选了2个好方法。

使用Informix,我创建了一个临时表,我试图从select语句填充.在此之后,我想进行更新,以填充临时表中的更多字段.

所以我做的事情就像;

create temp table _results (group_ser int, item_ser int, restype char(4));

insert into _results (group_ser, item_ser)
select 
      group_ser, item_ser, null
from
      sometable

但是你不能选择null.

例如;

select first 1 current from systables

工作,但

select first 1 null from systables

失败!

(不要让我开始说明为什么我不能像没有指定表格那样只选择"选择当前"这样的SQL Server!)



1> Jonathan Lef..:

您不必编写存储过程; 你只需告诉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;

最近添加了"系统"表(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语句确实返回任何数据这一事实是你的麻烦最少.(但我从来没有把这看作是一个错误.)



2> Eric Petroel..:

这个页面说明你不能这样做的原因是因为"NULL"没有类型.因此,解决方法是创建一个简单地返回所需类型的NULL的sproc.

这听起来像是一个非常糟糕的解决方案.也许您可以在脚本中创建一个变量,将其设置为null,然后选择该变量?像这样的东西:

DEFINE dummy INT;
LET dummy = NULL;

SELECT group_ser, item_ser, dummy
FROM sometable

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有