0

我有一个脚本可以为 Firebird 生成数据库结构并使用 ISQL

由于 date 的类型,我使用的一些语句存在问题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)));

它给了我错误,从我看到的是 type 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)
);

在外部函数的声明中和域中以及在表的创建中都给出错误,并且总是在日期中给出错误。

不明白问题。

4

1 回答 1

1

关于函数 F_CUTTIME - 如果它取自 InterBase 5,我的意思是,它是为 InterBase 5 编译的,那么它必须为任何新的 InterBase 或 Firebird 重新编译。如果它无法重新编译,那么唯一的方法就是转移到 Dialect 3,并使用基本的 Firebird 函数和 CAST 来处理单独的 DATE 和 TIME 变量。

于 2017-09-07T10:22:32.367 回答