我有一个脚本来为Firebird生成数据库结构并使用ISQL
由于日期类型TIMESTAMP
,我使用的某些语句存在问题,例如使用外部函数:
DECLARE EXTERNAL FUNCTION F_CUTTIME
TIMESTAMP
RETURNS TIMESTAMP FREE_IT
ENTRY_POINT 'fn_cuttime' MODULE_NAME 'SISUDFIB';
或者例如创建域:
CREATE DOMAIN D_DATE AS TIMESTAMP
CHECK ((VALUE IS NULL) OR (VALUE = F_CUTTIME (VALUE)));
它给了我错误,从我看到的类型为TIMESTAMP
。
当我创建数据库的结构时,我生成一个脚本,我在外部函数的声明中得到错误,但只有在我使用TIMESTAMP的那些时才告诉我这个错误:
Stament failed, sqlstate = 39000
invalid request BLR offset 13
-function F_CUTTIME is not defined
我进入了TIMESTAMP所在的函数,其余的函数生成了我。
如何创建我的脚本以便我不会在使用ISQL的Firebird中出现错误?
我举个例子:
SET SQL DIALECT 1;
CREATE DATABASE 'C: \ SISCONIBSCT.fdb' PAGE_SIZE 8192
USER 'SISCONIB' PASSWORD 'telecoman'
DEFAULT CHARACTER SET WIN1252;
/ * External Function declarations * /
DECLARE EXTERNAL FUNCTION F_CUTTIME
TIMESTAMP
RETURNS TIMESTAMP FREE_IT
ENTRY_POINT 'fn_cuttime' MODULE_NAME 'SISUDFIB';
/ * Domain definitions * /
CREATE DOMAIN D_BOOLEAN AS CHAR (1)
DEFAULT 'T'
CHECK (VALUE IN ('F', 'T')) NOT NULL;
CREATE DOMAIN D_DATE AS TIMESTAMP
CHECK ((VALUE IS NULL) OR (VALUE = F_CUTTIME (VALUE)));
CREATE DOMAIN D_DATETIME AS TIMESTAMP;
CREATE DOMAIN D_TIME AS TIMESTAMP
CHECK ((VALUE IS NULL) OR (F_CUTTIME (VALUE) = F_TIMEBASE ()));
CREATE TABLE SISFASE
(
CODSCT SMALLINT NOT NULL,
CODEST CHAR (2) NOT NULL,
CODPRO SMALLINT NOT NULL,
CODFAS SMALLINT NOT NULL,
DESCREAS VARCHAR (30) COLLATE PXW_SPAN,
PERESP D_TIME,
CODPLA CHAR (1) NOT NULL,
CODETG SMALLINT NOT NULL,
PRIMARY KEY (CODSCT, CODEST, CODPRO, CODFAS)
);
在外部函数的声明中给出错误 就像在域中创建表一样 在日期中给我错误。
不明白这个问题。
答案 0 :(得分:1)
关于函数F_CUTTIME - 如果是从InterBase 5中获取的,我的意思是,它是为InterBase 5编译的,那么它必须为任何新的InterBase或Firebird重新编译。如果它无法重新编译,那么唯一的方法是移动到Dialect 3,并使用基本的Firebird函数和CAST来处理单独的DATE和TIME变量。