DB2数据库中的序列和触发器??

DB2数据库中的序列和触发器??,第1张

Berkeley DB (DB)是一个高性能的,嵌入数据编程库,和C语言,C++,Java,Perl,Python,PHP,Tcl以及其他很多语言都有绑定。Berkeley DB可以保存任意类型的键/值对,而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时 *** 作数据库,支持最大256TB的数据,广泛用于各种 *** 作系统包括大多数Unix类 *** 作系统和Windows *** 作系统以及实时 *** 作系统。 2.0版本或以上的Berkeley DB由Sleepycat Software公司开发,并使用基于自由软件许可协议/私有许可协议的双重授权方式提供[1],附有源代码。开发者如果想把Berkeley DB嵌入在私有软件内需要得到Sleepycat公司的许可,若将软件同样遵循GPL发布,则不需许可即可使用。而2.0版本以下的则使用BSD授权,可自由作商业用途。 Berkeley DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的 ndbm,GNU项目的gdbm),Berkeley DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年,BSD UNIX第4.4发行版中包含了Berkeley DB1.85版。基本上认为这是Berkeley DB的第一个正式版。在1996年中期,Sleepycat软件公司成立,提供对Berkeley DB的商业支持。在这以后,Berkeley DB得到了广泛的应用,成为一款独树一帜的嵌入式数据库系统。2006年Sleepycat公司被Oracle 公司收购,Berkeley DB成为Oracle数据库家族的一员,Sleepycat原有开发者继续在Oracle开发Berkeley DB,Oracle继续原来的授权方式并且加大了对Berkeley DB的开发力度,继续提升了Berkeley DB在软件行业的声誉。Berkeley DB的当前最新发行版本是4.7.25。 值得注意的是DB是嵌入式数据库系统,而不是常见的关系/对象型数据库,对SQL语言不支持,也不提供数据库常见的高级功能,如存储过程,触发器等。 Berkeley DB的体系结构Berkeley DB以拥有比Microsoft SQL Server和Oracle等数据库系统而言更简单的体系结构而著称。例如,它不支持网络访问—程序通过进程内的API访问数据库。 他不支持SQL或者其他的数据库查询语言,不支持表结构和数据列。 访问数据库的程序自主决定数据如何储存在记录里,Berkeley DB不对记录里的数据进行任何包装,每个记录有且只有两部分:键、值,所以在Berkeley DB的背景下通常用key/data pair指代一个记录。记录和它的键都可以达到4G字节的长度。 尽管架构很简单,Berkeley DB却支持很多高级的数据库特性,比如ACID 数据库事务处理,细粒度锁,XA接口,热备份以及同步复制。 Berkeley DB包含有与某些经典Unix数据库编程库兼容的接口,包括:dbm,ndbm和hsearch。Berkeley DB的核心数据结构数据库环境句柄DB_ENV: 每个DB_ENV相当于一个数据库,它包含了数据库全局信息,比如缓冲区大小、以及对事务、日志、锁等子系统的全局配置信息。数据库句柄结构DB:每个DB相当于关系数据库的一个表,其中存储了很多key/data pair。DB句柄代表了一个包含了若干描述数据库表属性的参数,如数据库访问方法类型、逻辑页面大小、数据库名称等;同时,DB结构中包含了大量的数据库处理函数指针,大多数形式为 (*dosomething)(DB *, arg1, arg2, …)。其中最重要的有open,close,put,get等函数。 数据库记录结构DBT:DB中的记录由关键字和数据构成,关键字和数据都用结构DBT表示。实际上完全可以把关键字看成特殊的数据。结构中最重要的两个字段是 void * data和u_int32_t size,分别对应数据本身和数据的长度。 数据库游标结构DBC:游标(cursor)是数据库应用中常见概念,其本质

SIGNAL SQLSTATE '75002' ('ID不能为空') 测试成功的执行代码如下: db2 =>CREATE TRIGGER AfterInsertDetail \db2 (cont.) =>AFTER INSERT ON OrderDetail \db2 (cont.) =>REFERENCING NEW AS N \db2 (cont.) =>FOR EACH ROW MODE DB2SQL \db2 (cont.) =>BEGIN ATOMIC \db2 (cont.) =>DECLARE v_nowCount INT\db2 (cont.) =>SET v_nowCount = \db2 (cont.) =>(SELECT Amount FROM Goods \db2 (cont.) =>WHERE ID = N.GoodsID )\db2 (cont.) =>IF v_nowCount - N.Amount 0 THEN \db2 (cont.) =>SIGNAL SQLSTATE '75002' ('库存不足!') \db2 (cont.) =>ELSE \db2 (cont.) =>UPDATE \db2 (cont.) =>Goods \db2 (cont.) =>SET \db2 (cont.) =>Amount = Amount - N.Amount \db2 (cont.) =>WHERE \db2 (cont.) =>ID = N.GoodsID\db2 (cont.) =>END IF\db2 (cont.) =>ENDDB20000I SQL 命令成功完成。db2 =>INSERT INTO OrderDetail VALUES(1, 1, 90)DB20000I SQL 命令成功完成。db2 =>INSERT INTO OrderDetail VALUES(1, 1, 20)DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在SQL 处理期间,它返回:SQL0438N 应用程序发生错误或警告,其诊断文本为:"库存不足!"。 SQLSTATE=75002db2 =>select * from goodsID AMOUNT----------- ----------- 1 10 1 条记录已选择。db2 =>select * from OrderDetailID GOODSID AMOUNT----------- ----------- ----------- 1 1 90 1 条记录已选择。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6756553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存