无法使用ISQL命令创建Informix存储过程?

时间:2009-10-20 17:39:57

标签: sql stored-procedures informix

我无法使用Informix SQL中的'isql'命令在IBM Informix Dynamic Server Version 10.00.FC9上创建此存储过程(请参阅Jonathan Leffler对此帖here的回答)。

(

附近的两个示例中的每一个RETURNING CHAR(8)字符都出错了

离。 1:

CREATE PROCEDURE ampm_time(tm SMALLINT) RETURNING CHAR(8);
    DEFINE hh SMALLINT;
    DEFINE mm SMALLINT;
    DEFINE am SMALLINT;
    DEFINE m3 CHAR(3);
    DEFINE a3 CHAR(3);
    LET hh = MOD(tm / 100 + 11, 12) + 1;
    LET mm = MOD(tm, 100) + 100;
    LET am = MOD(tm / 1200, 2);
    LET m3 = mm;
    IF am = 0
    THEN LET a3 = ' am';
    ELSE LET a3 = ' pm';
    END IF;
    RETURN (hh || ':' || m3[2,3] || a3);
END PROCEDURE;

离。 2:

CREATE PROCEDURE ampm_time(tm SMALLINT) RETURNING CHAR(8);
    DEFINE i2 SMALLINT;
    DEFINE hh SMALLINT;
    DEFINE mm SMALLINT;
    DEFINE am SMALLINT;
    DEFINE m3 CHAR(3);
    DEFINE a3 CHAR(3);
    LET i2 = tm / 100;
    LET hh = MOD(i2 + 11, 12) + 1;
    LET mm = MOD(tm, 100) + 100;
    LET i2 = tm / 1200;
    LET am = MOD(i2, 2);
    LET m3 = mm;
    IF am = 0
    THEN LET a3 = ' am';
    ELSE LET a3 = ' pm';
    END IF;
    RETURN (hh || ':' || m3[2,3] || a3);
END PROCEDURE;

他们是由Jonathan Leffler(Informix Magician extraordinaire)设计的,旨在解决我在链接帖子中提出的问题。预期的返回是将持有军事时间的INT数据类型转换为2:30 pm类型格式。

1 个答案:

答案 0 :(得分:2)

此问题是DB-Access与ISQL。

ISQL有一种扭曲的幽默感,并认为SQL的语法仍然与当前的Informix OnLine 4.10(或者当时的INFORMIX-OnLine 4.10)相匹配。具体来说,它不知道存储过程由分号分隔的多个语句组成,并且错误地假设SQL语句以第一个分号结束而不是字符串或注释。

解决方法:

  • 使用DB-Access代替ISQL创建存储过程。
  • IIUG Software Archive获取SQLCMD,然后使用它。
  • 使用SQLCMD软件中的“mkproc”创建存储过程。

其中最简单的方法是使用DB-Access(也就是dbaccess - 在服务器软件所在的$ INFORMIXDIR / bin中找到)。