我无法建立在IBM Informix Dynamic Server的版本10.00.FC9此存储过程(见乔纳森·莱弗勒的答案,这个职位在这里使用从Informix SQL的“ISQL”命令)。
(对于他附近的两个示例,我在char上均出现错误RETURNING CHAR(8)
(
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非凡的专家)设计的,旨在解决我在链接文章中提出的问题。预期的返回结果是将保存军事时间的INT数据类型转换为2:30 pm类型的格式。
此问题是DB-Access与ISQL。
ISQL具有一种扭曲的幽默感,并认为SQL的语法仍与Informix OnLine 4.10(或当时的INFORMIX-OnLine 4.10)保持一致。具体来说,它不知道存储过程是由多个用分号分隔的语句组成的,并且错误地假定SQL语句以第一个分号结尾而不是字符串或注释。
解决方法:
其中,最简单的方法是使用DB-Access(又名dbaccess-在服务器软件所在的$ INFORMIXDIR / bin中找到)。