我无法使用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类型格式。
答案 0 :(得分:2)
此问题是DB-Access与ISQL。
ISQL有一种扭曲的幽默感,并认为SQL的语法仍然与当前的Informix OnLine 4.10(或者当时的INFORMIX-OnLine 4.10)相匹配。具体来说,它不知道存储过程由分号分隔的多个语句组成,并且错误地假设SQL语句以第一个分号结束而不是字符串或注释。
解决方法:
其中最简单的方法是使用DB-Access(也就是dbaccess - 在服务器软件所在的$ INFORMIXDIR / bin中找到)。