工程界的好帮手 (工程项目好助手)

工程建设好帮手,工程行业好帮手

第1章 达梦数据库编程概述

第1章 达梦数据库编程概述

达梦数据库管理系统DM8(简称达梦数据库或DM)是武汉达梦数据库股份有限公司推出的具有完全自主知识产权的新一代高性能数据库产品,具有丰富的数据库访问及操作接口,完全满足当前主流程序设计语言开发的需要,本章主要介绍达梦数据库的主要特点、技术指标、主要编程接口、主要系统包、语法描述、示例数据库、SQL程序编辑和调试工具。

1.1 主要特点和技术指标

达梦数据库是一个能跨越多种软硬件平台,具有大型数据综合管理能力且高效稳定的通用数据库管理系统,而且与Oracle、SQL Server等主流数据库具有高度的兼容性。达梦数据库在支持应用系统开发及数据处理方面的主要特点体现如下。

(1)支持安全高效的服务器端存储模块的开发。

达梦数据库能够运用过程语言和SQL语句创建存储过程或存储函数(将存储过程和存储函数统称为存储模块),存储模块运行在服务器端,并能对其进行访问控制,减少了应用程序对达梦数据库的访问,提高了数据库的性能和安全性。

达梦数据库还提供了丰富多样的程序包,包括特有的空间信息处理DMGEO系统包,以及兼容Oracle数据库的DBMS_ALERT、DBMS_OUTPUT、UTL_FILE和UTL_MAIL等系统包共计36个,为空间信息处理、收发邮件、访问和操作操作系统数据文件等功能的开发提供了有效的手段。

达梦数据库还提供了命令行和图形化两种调试工具,支持对存储过程中SQL执行计划的准确跟踪,使得SQL调试工具不仅可用于调试程序,还可用于对复杂存储过程、存储函数、触发器、包、类等高级对象进行性能跟踪与调优。

(2)具有符合国际通用标准或行业标准的数据库访问和操作接口。

达梦数据库遵循ODBC、JDBC、OLE DB、.NET Provider等国际数据库标准或行业标准,提供了符合ODBC 3.0标准的ODBC接口驱动程序,符合JDBC 3.0标准的JDBC接口驱动程序,以及符合OLE DB 2.7标准的OLE DB接口驱动程序,从而支持Eclipse、JBuilder、Visual Studio、Delphi、C++Builder、PowerBuilder等各种流行数据库应用开发工具。

(3)高度兼容Oracle、SQL Server等主流数据库管理系统。

达梦数据库增加了Oracle、SQL Server等数据库的数据类型、函数和语法,在功能扩展、函数定义、调用接口定义及调用方式等方面尽量与Oracle、SQL Server等数据库产品一致,实现了很多Oracle独特的功能和语法,包括ROWNUM表达式、多列IN语法、层次查询、外连接语法“(+)”、INSTEAD OF触发器、%TYPE及记录类型等,使得多数Oracle应用能够不经修改直接移植到达梦数据库中。另外,原有的基于Oracle的OCI和OCCI接口开发的应用程序,只需要将应用连接到由DM8提供的兼容动态库即可,开发人员不用改变应用系统的数据库交互代码,就能够基本完成应用程序的移植,从而最大限度地提高应用系统的可移植性和可重用性,降低应用系统移植和升级的工作难度和强度。

达梦数据库还提供了策略可定制、并行化数据迁移、批量数据快速加载的数据迁移工具,便于用户和开发人员从不同的数据库、文件数据源向达梦数据库进行数据迁移。

(4)支持国际化应用开发。

达梦数据库支持UTF-8、GB 18030及EUC-KR等字符集。用户能够在安装系统时,指定服务器端使用UTF-8字符集。在客户端能够以各种字符集存储文本,并使用系统提供的接口设置客户端使用的字符集,或者默认使用客户端操作系统默认的字符集。客户端和服务器端的字符集由用户指定后,所有字符集都能够透明地使用,系统负责不同字符集之间的自动转换,从而满足国际化应用开发的需要,增强了达梦数据库的通用性。

(5)自适应各种软硬件平台。

达梦数据库服务器内核采用一套源代码实现了对不同软件(Windows/Linux/UNIX/AIX/Solaris等)、硬件(x64/x86/SPARC/POWER/TITAM)平台的支持,还支持包括龙芯、飞腾、申威系列,以及兆芯、华为、海光等多种不同国产CPU架构的服务器设备,以及配套的中标麒麟、银河麒麟、中科方德、凝思、红旗、深之度、普华、思普等多种国产Linux操作系统。各种平台上的数据存储结构、消息通信结构也完全保持一致,使得达梦数据库的各种组件均能够跨不同的软、硬件平台与数据库服务器进行交互。另外,达梦数据库管理工具、应用开发工具集使用Java编写,从而能够跨平台工作,即同一程序无须重新编译,将其执行代码复制到任何一种操作系统平台上都能直接运行,确保在各种操作系统平台上都有统一的界面风格,便于用户学习掌握工具软件。

达梦数据库在技术指标上达到或超过主流数据库产品,主要技术指标如下。

(1)定长字符串类型(CHAR)字段最大长度8188个字符。

(2)变长字符串类型(VARCHAR)字段最大长度8188个字符。

(3)多媒体数据类型字段最大长度2GB - 1个字符。

(4)一个记录(不含多媒体数据)最大长度为页大小的一半。

(5)一个记录中最多字段个数为2048个。

(6)一个表中最大记录数为256万亿条。

(7)一个表中最大数据容量为4000PB(受操作系统限制)。

(8)表名、列名等标识符的最大长度为128个字符。

(9)能定义的最大同时连接数为65000个。

(10)每个表空间的最多物理文件数目为256个。

(11)每个数据库最多的表、视图、索引等对象的数目各为16777216个。

(12)数值类型字段的最高精度为38个有效数字。

(13)在一个列上允许建立的最多索引数为1020个。

(14)表上的最大UNIQUE索引数为64个。

1.2 主要编程接口和系统包

1.2.1 主要编程接口

达梦数据库具有丰富的应用开发编程接口,为应用系统访问和操作数据库数据提供了高效便捷的手段,可满足不同数据库应用系统开发的需要。达梦数据库支持的编程语言及接口特性如表1-1所示。

表1-1 达梦数据库支持的编程语言及接口特性

工程建设好帮手,工程行业好帮手

(续表)

工程建设好帮手,工程行业好帮手

如图1-1所示是达梦数据库主要编程接口及关系,现将其中一些编程接口说明如下。

工程建设好帮手,工程行业好帮手

图1-1 达梦数据库主要编程接口及关系

(1)DM DPI。

DM DPI是达梦数据库原生编程接口,其实现参考Microsoft ODBC 3.0标准,基于C语言编写,提供了访问达梦数据库的最直接的途径。其他除DM JDBC和DM .NET Data Provider外,DM DCI、DM ODBC、DM PHP、DM Python、DM Node.js?1776658662.273 等接口都是基于DM DPI扩展实现的。

(2)DM DCI。

DM DCI(DM Call Interface)基于DM DPI接口,采用C语言编写实现,提供了一组对达梦数据库进行数据访问和存取的接口函数,支持C和C++的数据类型、接口调用、语法和语义。

(3)DM JDBC。

DM JDBC(Java Database Connectivity)是用Java编程语言编写的类和接口,为Java语言访问和操作达梦数据库提供支撑。DM JDBC是Java语言访问数据库的主要方式,以便于用连接池的功能来提高应用系统访问数据库的性能。

(4)DM ODBC。

DM ODBC 3.0遵循Microsoft ODBC 3.0标准开发,实现应用程序与达梦数据库的互联。程序员能够直接调用DM ODBC 3.0接口函数访问达梦数据库,也能够使用可视化编程工具,如C++Builder、PowerBuilder 等,通过DM ODBC 3.0 访问达梦数据库。DM ODBC基于DM DPI接口,采用C语言开发实现。

在应用DM ODBC开发程序时,需要安装达梦数据库客户端ODBC驱动程序,应用环境还需要安装相应的操作系统(Windows/Linux)的ODBC安装包,并配置DM ODBC数据源。

(5)DM .NET Data Provider。

DM .NET Data Provider是在.NET Framework 编程环境下,采用C#语言开发的应用程序访问达梦数据库的编程接口。DM .NET Data Provider在数据源和代码之间创建了一个轻量级的中间层,以便在不影响功能的前提下提高性能。

(6)DM PHP。

DM PHP是一个基于DM DPI开发的动态扩展库,实现基于PHP开发的Web应用访问和操作达梦数据库。DM PHP参考MySQL的PHP扩展实现。

(7)DM Python。

DM Python是依据Python DB API version 2.0标准开发的Python访问达梦数据库接口。DM Python基于DM DPI接口开发实现。在应用DM Python时,除需要Python标准库外,还需要DM DPI的动态库。

(8)DM Node.js?1776658662.273 。

DM Node.js?1776658662.273 是基于DM OCI开发实现的Node.js?1776658662.273 应用程序访问达梦数据库接口,与Oracle公司开发的Node oracledb功能兼容。

(9)DM Go。

DM Go是遵循Go语言数据库访问和数据操作标准,基于GO 1.13版本开发的database/sql包接口,实现Go语言应用程序访问达梦数据库的功能。

(10)数据装载DM FLDR。

数据装载DM FLDR(Fast Loader)是实现将文本数据快速载入达梦数据库的接口。开发人员能够使用DM FLDR接口,将按照一定格式排序的文本数据以快速、高效的方式载入达梦数据库中,或者把达梦数据库中的数据按照一定格式写入文本文件。DM FLDR接口提供C语言和Java语言两种接口,并提供dmfldr数据装载命令行工具。

(11)日志分析DM Logmnr。

DM Logmnr包是达梦数据库的日志分析工具,用于分析归档日志文件,包括JNI接口、C接口,以及DBMS_LOGMNR系统包。在使用DBMS_LOGMNR系统包时能够通过动态视图v$logmnr_contents展示日志中的信息。

达梦数据库各类编程接口动态库及驱动程序清单如表1-2所示。

表1-2 达梦数据库各类编程接口动态库及驱动程序清单

工程建设好帮手,工程行业好帮手

(续表)

工程建设好帮手,工程行业好帮手

1.2.2 主要系统包

达梦数据库提供了丰富多样的程序包,包括特有的空间信息处理DMGEO系统包,以及兼容Oracle数据库的系统包,主要系统包及其功能如表1-3所示。

表1-3 达梦数据库主要系统包及其功能

工程建设好帮手,工程行业好帮手

(续表)

工程建设好帮手,工程行业好帮手

(续表)

工程建设好帮手,工程行业好帮手

(续表)

工程建设好帮手,工程行业好帮手

1.3 语法描述说明

在本书中,SQL语句中各个符号的含义如下。

(1)< >表示一个语法对象。

(2)::= 是定义符,用来定义一个语法对象。定义符左边为语法对象,右边为相应的语法描述。

(3)| 是或者符,或者符限定的语法选项在实际的语句中只能出现一个。

(4){ }指明花括号内的语法选项在实际的语句中能够出现0,…, N次(N为大于0的自然数),但是花括号本身不能出现在语句中。

(5)[ ] 指明方括号内的语法选项在实际的语句中能够出现0或1次,但是方括号本身不能出现在语句中。

为了便于阅读,本书实例中的所有要害字都以大写形式出现,所有数据库对象、变量均采用小写形式。

1.4 示例数据库说明

本书中的示例数据库是某公司的人力资源信息,数据表包括employee(员工信息)、department(部门信息)、job(岗位信息)、job_history(员工任职岗位历史信息)、location(部门地理位置信息)、region(部门所在地区信息)、city(部门所在城市信息),示例数据库ER(实体联系)图如图1-2所示,各数据表的内容如表1-4~表1-10所示[1]。

工程建设好帮手,工程行业好帮手

图1-2 示例数据库ER图

表1-4 数据表employee(员工信息)的列清单

工程建设好帮手,工程行业好帮手

表1-5 数据表department(部门信息)的列清单

工程建设好帮手,工程行业好帮手

表1-6 数据表job(岗位信息)的列清单

工程建设好帮手,工程行业好帮手

表1-7 数据表job_history(员工任职岗位历史信息)的列清单

工程建设好帮手,工程行业好帮手

表1-8 数据表location(部门地理位置信息)的列清单

工程建设好帮手,工程行业好帮手

表1-9 数据表region(部门所在地区信息)的列清单

工程建设好帮手,工程行业好帮手

表1-10 数据表city(部门所在城市信息)的列清单

工程建设好帮手,工程行业好帮手

1.5 DM SQL程序编辑及调试工具

达梦数据库提供了具有图形化界面的DM管理工具和命令行工具dmdbg,开发人员能够利用这些工具进行DM SQL程序的编辑、调试和运行,以及对触发器、存储过程、存储函数、包等高级对象进行管理。DM管理工具中的SQL助手2.0,具有SQL语法检查功能和SQL输入助手功能。SQL语法检查功能能够对用户输入的SQL语句进行实时的语法检查,定位错误的SQL语句,并能够对用户输入SQL进行实时智能提示,提示的内容包括数据库对象和SQL要害字等。在程序单步调试过程中能够查看堆栈、断点、变量和执行计划等信息。

1.5.1 DM管理工具

1.DM SQL程序编辑及运行

首先运行“DM管理工具”,然后单击选择主界面“对象导航页”列表下的“LOCALHOST”节点,这时会弹出登录界面。在登录界面输入用户名和口令(如“DMHR”“dameng123”)后,再单击“确定”按键,进入如图1-3所示的主界面。

工程建设好帮手,工程行业好帮手

图1-3 DM管理工具主界面

在主界面右侧SQL编辑器窗口里编辑程序,编辑完成后,单击主菜单快捷工具条中的图标

工程建设好帮手,工程行业好帮手,或者按快捷键“F8”运行程序,运行提示信息出现在SQL编辑器下半部分的“消息”窗口中,如图1-4所示。

2.DM SQL程序调试

DM管理工具中的“SQL调试器”提供了输入SQL调试参数,单步调试,查看堆栈、变量,以及执行计划等功能。下面以存储过程为例,简要介绍DM SQL程序调试的方法。

工程建设好帮手,工程行业好帮手

图1-4 DM管理工具SQL编辑器及其下半部分的“消息”窗口

首先,在DM管理工具左侧“对象导航”列表,找到要调试的存储过程,单击鼠标右键,从弹出菜单中选择执行“调试|在新的调试编辑器调试”命令,系统自动生成调试程序,如图1-5中的“SQL调试”窗口所示。“SQL调试”窗口的快捷按钮

工程建设好帮手,工程行业好帮手

工程建设好帮手,工程行业好帮手

工程建设好帮手,工程行业好帮手分别表示继续、暂停、停止;按钮

工程建设好帮手,工程行业好帮手

工程建设好帮手,工程行业好帮手

工程建设好帮手,工程行业好帮手分别表示进入(F5)、下一步(F6)、跳出(F7)。

单击“SQL调试”窗口工具栏快捷按钮

工程建设好帮手,工程行业好帮手或者快捷键“F11”,再单击工具栏的

工程建设好帮手,工程行业好帮手按钮进行单步调试。单击“SQL调试”窗口下面的各个选项卡能够查看控制台、初始变量、堆栈、断点、变量和执行计划等信息,如图1-6所示。

工程建设好帮手,工程行业好帮手

图1-5 DM管理工具“SQL调试”窗口

工程建设好帮手,工程行业好帮手

图1-6 DM管理工具SQL调试之单步调试

1.5.2 命令行工具dmdbg

dmdbg是达梦数据库提供的用于调试DM SQL程序的命令行工具,安装达梦数据库管理系统后,在安装目录的“bin”子目录下可找到dmdbg执行程序。使用dmdbg,首先要调用系统过程SP_INIT_DBG_SYS(1)创建调试所需要的包。

1.工具状态及调试命令

dmdbg在整个运行过程中能够处于初始状态(S)、待执行状态(W)、执行状态(R)、调试状态(D)、执行结束状态(O)等不同的状态。

(1)初始状态(S):工具启动完成后,尚未设置调试语句。

(2)待执行状态(W):设置调试语句后,等待用户执行。

(3)执行状态(R):开始执行后,未中断而运行的过程。

(4)调试状态(D):执行到断点或强制中断后进入交互模式。

(5)执行结束状态(O):执行完当前设置的调试语句,并返回结果。

dmdbg在不同的状态下能够执行不同的操作,如表1-11所示,其中备注表示不同的命令分别在哪几种状态下能够使用。

表1-11 dmdbg的调试命令

工程建设好帮手,工程行业好帮手

2.调试过程

下面以第3章例3-5中的存储过程“p_salarysum_ bycityname”为例,介绍应用dmdbg的方法。

第1步,登录。双击“dmdbg*ex.e**”文件执行程序,进入dmdbg命令行工具窗口。在命令行工具窗口输入“LOGIN”命令进行登录,会提示用户输入服务名(LOCALHOST)、用户名(DMHR)、密码(dameng123)、端口号(5236)、SSL路径和SSL密码。

第2步,设置调试用的SQL语句。如果SQL是单条语句,则以分号“;”结尾;如果是程序块,则程序块后必须以单独一行的斜杠符“/”结束。在调试中行数从SQL语句实际起始行开始计数。在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第3步,显示脚本。每次显示5行代码,再次执行L命令时(不再需要带方法名),从已显示的下一行开始显示。在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第4步,设置断点。对于断点的行号设置必须遵守以下原则:①定义声明部分不能设置断点;②如果一条语句跨多行,则断点应设置在语句的最后一行;③如果多条语句在同一行,则在第一条语句执行前执行中断;④如果设置断点的行不能中断,则自动将其下移到第一个能够中断的行;⑤能够在调试过程中动态添加断点,如果在同一位置重复设置断点,则重复断点会被疏忽。在存储过程“p_salarysum_bycityname”的第11行设置断点,在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第5步,显示断点。显示的每个断点包含以下信息:①序号,这是一个自增值,从1开始,设置断点时自动为其分配;②方法名,如果为程序块,则方法名为空;③行号,在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第6步,运行。如果设置了断点,则执行到断点指定的位置时中断,转入调试状态,并显示当前执行所在行的语句;否则,执行完成并显示结果。R返回结果结束执行之后,如果没有重新设置SQL语句,则再次运行的仍是之前设置的SQL语句,断点信息能够重用;如果重新设置了SQL语句,则断点信息会被清空。在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第7步,显示city_rec.city_name变量值。在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第8步,继续执行。在调试状态下,能够使用命令C继续SQL语句的执行,直到运行到断点或执行完成。在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第9步,取消断点。断点序号能够通过INFO B命令获取,删除后断点的编号不会重用。取消断点命令能够在调试工具运行的任何时间调用。在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第10步,结束执行。如果结束执行之后,必须重新设置SQL语句,且断点信息被清空,则在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

第11步,退出调试工具。如果不希望继续调试,能够输入命令QUIT。dmdbg将中断连接,退出执行。在命令行工具窗口输入如下命令:

工程建设好帮手,工程行业好帮手

[1]在安装达梦数据库系统时,用户能够选择“创建示例数据库DMHR”,系统将自动创建“DMHR”模式,该模式归属于“SYSDBA”用户,“SYSDBA”用户密码默认为“SYSDBA”。本书相关示例代码中未加模式名称“DMHR”,读者在测试本书相关示例时,需要先执行“SET SCHEMA DMHR”将模式设置为“DMHR”。