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


相关推荐

  • asp.net dropdownlist的值怎么设置_redis skiplist

    asp.net dropdownlist的值怎么设置_redis skiplistList productlist = ProductAdapter.Instance.GetList();dlproductname.DataSource = productlist;dlproductname.DataTextField = “ProductName”;dlproductname.DataValueField = “id”;dlproduc

    2022年10月8日
    0
  • 使用Python打包含有pymssql成exe所躺的坑「建议收藏」

    使用Python打包含有pymssql成exe所躺的坑「建议收藏」一、如何打包Python打包exe文件简单运用pyinstaller库就行了1)安装pyinstaller库(自行安装)2)win+R打开运行窗口输入“powershell”3)输入pyinstaller-F路径\文件名.py(打包py文件的路径,py不能省略)看到successfully即为打包成功,但不一定能运用的!!!(划重点,下面便是我躺过的坑)二、打包exe成功但运行遇报错(打包成功,但双击运行一闪而过):打包的文件代码在这里想查清报错win+R打开运行窗口输入“cmd”

    2022年6月15日
    33
  • synchronousqueue场景_java中SynchronousQueue的核心方法

    synchronousqueue场景_java中SynchronousQueue的核心方法我们之前提过SynchronousQueue入队和出队的两种方法,其实它们都依托transfer方法得以实现。相比较而言,transfer可以同步进行入队和出队的操作,是SynchronousQueue中最重要的核心方法。下面我们就transfer概念、使用场景,以及在代码中增减元素的实例带来全面介绍。1.transfer概念进行匹配交换数据,SynchronousQueue内部使用Transfe…

    2022年6月22日
    45
  • java webservice服务端和客户端创建(JAX-WS)[通俗易懂]

    java webservice服务端和客户端创建(JAX-WS)[通俗易懂]idea:2020jdk:1.8目录1.搭建webservice服务端1.1新建一个java空项目1.2项目建好后,右键项目,选择“AddFrameworkSupport…”1.3生成wsdl,右键类的时候可能没有WebServices这个选项了,可以在Tools中找到这个功能1.4启动服务,右键HelloWorld启动项目1.5访问web服务1.6增加一个方法看看效果2.搭建webservice客户端2.1新建一个java空项目2.2项目生成好后会弹框出来,把wsdl地址放

    2022年7月13日
    19
  • sigaction信号处理

    sigaction信号处理1.sigactionintsigaction(intsignum,conststructsigaction*act,structsigaction*oldact);signum:可以指定SIGKILL和SIGSTOP以外的所有信号2.structsigactionstructsigaction{void(*sa_handler)(int);

    2022年5月26日
    35
  • 什么是tomcat类加载机制_理解分析类面试题

    什么是tomcat类加载机制_理解分析类面试题Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给

    2022年8月6日
    6

发表回复

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

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