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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • scp(跨服务区复制文件)和创建文件,文件夹,清空文件夹的内容

    scp(跨服务区复制文件)和创建文件,文件夹,清空文件夹的内容

    2021年7月18日
    63
  • Python sorted 函数

    Python sorted 函数Pythonsorted函数sorted可以对所有可迭代的对象进行排序操作,sorted方法返回的是一个新的list,而不是在原来的基础上进行的操作。从新排序列表。sorted语法:

    2022年7月6日
    25
  • TinyProxy:移动联通电信各个卡定向免流方法教程[通俗易懂]

    下载地址:https://www.lanzoui.com/i0Tsigfiv7c开始以电信星卡为例:打开软件右上角设置下高级模式然后返回复制下这模式【百度直连】免歪卡、星卡、小歪卡、小抖卡、大圣卡、百度系可免listen_port=65080; daemon=on; worker_proc=0; uid=3004; http_ip=112.80.255.21; http_port=443; http_del=”X-Online-Host,Host”..

    2022年4月15日
    396
  • 开源商城系统带app源码_萌果APP源码

    开源商城系统带app源码_萌果APP源码直接下载导入工程即可直接运行.包含服务器源码(服务器已经在线配置)主要功能如下:首页:从上到下分别是:广告轮播、菜单按钮、品牌推介、推介、热销商品分类:类似京东商品三级分类,左边是一级分类,右边是二级分类,二级分类下面包含三级子分类商城功能:商品详情、购物车、确认订单、支付功能商品详情:商品大图轮播、商品规格(选择不同规格显示不同价格,

    2022年4月19日
    87
  • setInterval与clearInterval

    setInterval与clearIntervalsetInterval 与 clearInterva 定义和用法语法返回值实例 setInterval 定义和用法 setInterval 方法可按照指定的周期 以毫秒计 来调用函数或计算表达式 setInterval 方法会不停地调用函数 直到 clearInterva 被调用或窗口被关闭 由 setInterval 返回的 ID 值可用作 clearInterva 方法的参数 语法 setInterval code millisec lang 参数描述

    2025年6月7日
    3
  • 在vue中使用tinymce富文本编辑器+tinymce富文本编辑器插入图片

    在vue中使用tinymce富文本编辑器+tinymce富文本编辑器插入图片1.安装#npminstalltinymce-S2.把node_modules\tinymce里面的文件包括tinymce文件夹全部复制到static文件夹下面,如下图3.在mian.js中引入tinymce(也可以在组件中引入)importTinymcefrom’tinymce’Vue.prototype.$tinymce=Tinymce…

    2022年5月1日
    83

发表回复

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

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