FIREBIRD使用经验总结

FIREBIRD使用经验总结

最近在改写一段ms sql的存储过程到firebird,
总结了一些经验,
firebird可以说是这个世界上最小的又支持存储过程的数据库的,
才2.3M而已,如果做小型的应用,比ms sql桌面版也有70多M(+sp3),
mysql也有20-30M,太不方便。

1.自定义函数问题.Access to UDF library “rfunc.dll” is denied by server administrator
花了很长时间,不明白为何,将rfunc.dll拷到udf目录,bin目录,windows\system32目录都不能解决问题,google一下,网上有同样的问题,但没有解决方案,结果我重装了一下firebird就解决了.

2.存储过程中变量的定义
ms sql存储过程中无论在哪都可以定义新的变量,但在firebird中,只能在as 与begin之间进行定义.firebird的变量不能用@符号,我将@全部变成a就好了.

3.存储过程中变量的使用
select @i=count(*) from table1 //ms sql
select count(*) from table1 into :i//firebird引用变量使用冒号

4.嵌入式sql,
firebird支持select * from table exists (select …) 或 select * from table in (select …)
但不支持select * from (select * from …) a,
我是将这类改写成视图解决的

5.case语句 
mssql 可使用field= case (),但firebbird仅支持case () as field,
6.mssql getdate()变成CURRENT_DATE+CURRENT_TIME
select * from snartleave where   dt_starttime<CURRENT_DATE+CURRENT_TIME
或
select * from snartleave where   dt_starttime<CURRENT_DATE||’ ‘ ||CURRENT_TIME

7.返回数据集的存储过程写法(firebird写法有点麻烦)
CREATE PROCEDURE SPVARTST2 (
    VAR_IPTARTNO CHAR(6))
RETURNS (
    VAR_ARTNAME CHAR(10))
AS
begin
for select v_name1 from snart where v_artNo=:var_iptartno into :var_artname do
suspend;
end

8.自动增长字段的使用(autoincrement)
firebird有个发生器(generator)的东东,在发生器里记录值的增长,
再用触发器实现
begin
if (new.i_seqno is null) then
begin
    NEW.i_seqno = GEN_ID(GEN_T_DB_ARTSEQNO_ID,1);
end
end
//GEN_T_DB_ARTSEQNO_ID就是创建的发生器,看到没有,也就是说不同的表不同的字段可以共用一个发生器,gen_id相当于identity,看起来比mssql复杂,其实也很简单。

9.发生器重置 mssql里自动增加的字段要重置好像很麻烦,较难控制,
firebird可以这样(存储过程中)
agenerator=Gen_ID(GEN_T_DB_ARTSEQNO_ID,Gen_ID(GEN_T_DB_ARTSEQNO_ID,0)*-1+1);
//agenerator是一个整形变量,好像一定要装gen_id的值符给一个变量才行,不知道有没有更好的办法,不用定义一个多余的变量
可参考如下网址:http://www.fingerbird.de/generatorguide_body.htm

10 通过一个表更改另一个表的数据
mssql:update table1 set cname=b.cname from table1 a inner join table2 as b where a.id=b.id
firebird:update table1 a set cname=(select cname from table 2 b where b where a.id=b.id)
11.如何选择前几条记录 
mssql: select top 10 * from table1 
firebird:select first 10 * from table1 
IB:select * from table rows 10 
12.Firebird存存储过程中的事务 
在存储过程 ib/fb 不支持开事务或者结束事务。提交是由调用者提交的。也就是,fb/ib存储过程应该设计在一个事务里。 
在sql server里,存储过程或以开这样的事务: 
begin trancstion 
commit trancstion 
但在fb/ib里没有这样的事务 
需要在调的程序中开事务 
如: 
pFIBDtbsMain.StartTransaction; 
pFIBDtbsMain.Commit;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110912.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 13典藏AutoHotKey脚本让您生活更轻松

    13典藏AutoHotKey脚本让您生活更轻松AutoHotKey是最好的Windows自动化程序之一,可以执行最简单的操作到最艰巨的任务。AutoHotKey是一个免费的开源程序,通过这种脚本语言您的任何Windows日常任务。即使“脚本语言”听起来令人生畏,实际它非常易于使用,并且您可以做各种很酷的事情。让我分享我最喜欢和最常用的AutoHotKey脚本,这些脚本使我的日常任务更加轻松,这可能会对您有所帮助。在开始之前,假定您已经知道如何安装和配置AutoHotKey。此外,请注意以英文分号开头的行是注释。1.搜索快捷方式…

    2022年7月21日
  • tcp 粘包[通俗易懂]

    tcp 粘包[通俗易懂]tcp粘包

    2022年8月11日
  • RSA加密算法心得

    RSA加密算法心得RSA加密密钥是非对称的,一般是成对出现分为公钥和私钥,所以也叫非对称加密,可以公钥加密,私钥解密,也可以私钥加密,公钥解密。一般用于数据加密。

    2022年5月31日
  • mac键位的键盘(机械键盘个别键位失灵)

    mac和Windows在键盘上还是有一些差距的,在习惯了Windows的键位之后还是很难第一时间转换到mac的键位上,为大家整理了一下mac的键位分布,和常用的快捷键。Mac键盘键位分布【F1~12】与传统键盘不同的是,Mac键盘,只是多了几个功能键,可以简单将Mac上的【fn+F112】对应Win上【F112】,其Mac环境上的功能,如下图标注所示。Command键(⌘)Command键是mac独有的一个按键,大多数的快捷组合键都是和它配合使用,相当于Windows下的Ctrl键的功能,但

    2022年4月14日
  • linux查看端口号占用命令-netstat

    linux查看端口号占用命令-netstat题记经常会发现,很多时候我们在运行一些带有端口的程序时,程序经常会报端口被占用的问题,比如Tomcat8080,端口起不来。查看端口号netstat如果发现某个端口被占用后,可以用命令查看,该端口到底是被哪个进程所占用。命令如下:netstat-pan|grep5623#其中5623位端口号如图:发现5623的端口,被28425的进程id所占用,继

    2022年7月23日
  • 美化包软件_美化桌面的软件

    美化包软件_美化桌面的软件前言在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。

    2022年7月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号