Firebird数据库中有一些很特别的东西,很好用,但由于平时用的不多,记在这里,以备以后用到时查询。
1、以ADO 的OLE ODBC驱动方式访问 Firebird,可以使用如下连接串:
FBConn:='Provider=MSDASQL.1;Driver=Firebird/InterBase(r) driver;Dbname=F:\TEST.FDB;CHARSET=NONE;UID=SYSDBA;PWD=masterkey';
2、序列生成器,值是bigint 类型
在做自增加字段时使用,标准教程上都是写在触发器中,我觉得写在用户SQL中使用更方便,也就是从前台调用序列生成器,生成ID值,然后从前台更新到后台去。后台的ID字段只要是普通的int值即可。
create sequence CUSTOMER;set GENERATOR CUSTOMER to 200;select gen_id(CUSTOMER, 1) from RDB$DATABASE;GENERATOR 是 遗留保留字,sql-99支持 sequence 关键字,fb也是支持的。CREATE { SEQUENCE | GENERATOR } <名字> DROP { SEQUENCE | GENERATOR } <名字> SET GENERATOR <名字> TO <起始值> 这个好象不符合SQL语法的精神,下面的alter才是标准的语感ALTER SEQUENCE <名字> RESTART WITH <起始值> GEN_ID ( <名字> , <增长值> )NEXT value FOR <名字> NEXT value FOR 语法也是标准SQL语法,可以用的序列生成器上:INSERT INTO EMPLOYEE (ID, NAME)valueS (NEXT value FOR S_EMPLOYEE, 'John Smith'); 名字> 增长值> 名字> 起始值> 名字> 起始值> 名字> 名字> 名字>
3、内建了IIF函数,IIF (<search_condition>, <value1>, <value2>),作为case的快捷方式。
4、ROWS 语法,特别适合分页使用
SELECT ...
[ORDER BY <expr_list>]
ROWS <expr1> [TO <expr2>]
还有类似的语法,与上述ROWS类似的语句是:
FIRST (<expr2>-<expr1>+1) SKIP (<expr1> - 1)
5、EXECUTE BLOCK 语句
这个语句相当于动态建立与执行一个存储过程。或者说动态执行一个类似于存储过程的语句块。
SQL语言的扩展语句 EXECUTE BLOCK 使得在 SELECT 语句规范中可以使用"动态 PSQL"。它有这样的效果,如果是存储过程中的话,将允许一个PSQL自包含代码动态SQL语句中执行。
语法格式:
EXECUTE BLOCK [ (param datatype = ?, param datatype = ?, ...) ]
[ RETURNS (param datatype, param datatype, ...) }
AS
[DECLARE VARIABLE var datatype; ...]
BEGIN
...
END
例如:
EXECUTE BLOCK (X INTEGER = :X)
RETURNS (Y VARCHAR)
AS
DECLARE V INTEGER;
BEGIN
INSERT INTO T(...) valueS (... :X ...);
SELECT ... FROM T INTO :Y;
SUSPEND;
END
6、COMMENT 语句
COMMENT 语句,用来设置元数据描述,这个非常有意思。 语法格式: COMMENT ON DATABASE IS {'txt'|NULL}; COMMENT ON <basic_type> name IS {'txt'|NULL}; COMMENT ON COLUMN tblviewname.fieldname IS {'文字内容'|NULL}; COMMENT ON PARAMETER procname.parname IS {'txt'|NULL};
7、衍生表
MS MSQL 叫在线视图吧,语法类似于:
select * from (select * from tbl) as a inner join tbl2 b on a.id=b.id
查询结果作为表来使用。
8、FB2.0 发布时的文档吧,这里有个链接!