Firebird数据库相关备忘录

 

Firebird数据库中有一些很特别的东西,很好用,但因为平时用的很少,记在这里,以备之后用到时查询。 sql

 

 

一、以ADO 的OLE ODBC驱动方式访问 Firebird,可使用以下链接串:数据库

FBConn:='Provider=MSDASQL.1;Driver=Firebird/InterBase(r) driver;Dbname=F:\TEST.FDB;CHARSET=NONE;UID=SYSDBA;PWD=masterkey'; ide

 

 

 

二、序列生成器,值是bigint 类型函数

 

 

在作自增长字段时使用,标准教程上都是写在触发器中,我以为写在用户SQL中使用更方便,也就是从前台调用序列生成器,生成ID值,而后从前台更新到后台去。后台的ID字段只要是普通的int值便可。spa

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');

 

 

 

三、内建了IIF函数,IIF (<search_condition>, <value1>, <value2>),做为case的快捷方式。code

 

 

四、ROWS 语法,特别适合分页使用blog

 

SELECT ...教程

[ORDER BY <expr_list>]文档

ROWS <expr1> [TO <expr2>]get

 

 

还有相似的语法,与上述ROWS相似的语句是:

FIRST (<expr2>-<expr1>+1) SKIP (<expr1> - 1)

 

 

五、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

 

 

六、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};

 

 

七、衍生表

 

MS MSQL 叫在线视图吧,语法相似于:

 

select * from (select * from tbl) as a inner join tbl2 b on a.id=b.id

 

查询结果做为表来使用。

 

 

八、FB2.0 发布时的文档吧,这里有个连接!http://www.mesig.com/forum/th-abb-1

相关文章
相关标签/搜索