目录 第1章KingbaseES PL/SQL概述1 1.1PL/SQL概述1 1.1.1PL/SQL的优点1 1.1.2PL/SQL的特性2 1.1.3PL/SQL的结构4 1.2创建与运行PL/SQL代码5 1.2.1KSQL6 1.2.2KStudio9 1.3PL/SQL的运行机制10 1.3.1PL/SQL引擎10 1.3.2PL/SQL单元与编译参数12 1.4案例数据库介绍14 1.4.1SeaMart的ER图及其表结构14 1.4.2创建表19 1.5使用金仓在线帮助文档23 第2章PL/SQL程序结构24 2.1PL/SQL块结构24 2.2PL/SQL声明段27 2.2.1数据类型27 2.2.2变量和常量的声明28 2.3基本执行语句29 2.4条件选择语句32 2.4.1IF32 2.4.2CASE36 2.5循环语句38 2.5.1基本循环语句39 2.5.2FOR LOOP语句41 2.5.3WHILE LOOP语句43 2.5.4FOREACH语句44 2.6获取执行状态信息45 2.6.1获取结果状态和执行位置信息45 2.6.2错误和消息47 第3章PL/SQL的复合数据类型49 3.1集合类型49 3.1.1关联数组50 3.1.2可变数组52 3.1.3嵌套表53 3.1.4集合的构造函数56 3.1.5集合变量赋值57 3.1.6多维集合59 3.1.7集合的比较60 3.1.8集合方法61 3.2记录类型65 3.2.1记录类型概述65 3.2.2声明记录类型65 3.2.3使用记录类型66 目录 第4章PL/SQL中的静态SQL语句69 4.1静态SQL语句概述69 4.1.1静态SQL语句类型69 4.1.2PL/SQL中的SELECT语句70 4.1.3PL/SQL中的DML语句73 4.2游标75 4.2.1游标概念75 4.2.2隐式游标76 4.2.3声明和定义显式游标78 4.2.4打开和关闭显式游标79 4.2.5使用显式游标获取数据79 4.2.6显式游标查询中的变量84 4.2.7当显式游标查询需要列别名时86 4.2.8接收参数的显式游标87 4.2.9显式游标属性90 4.3游标变量93 4.3.1创建游标变量94 4.3.2打开和关闭游标变量95 4.3.3使用游标变量获取数据95 4.3.4为游标变量赋值97 4.3.5游标变量查询中的变量98 4.3.6游标变量属性100 4.3.7游标变量作为子程序参数100 4.4批量处理102 第5章事务处理109 5.1事务处理概述109 5.2事务处理语句109 5.2.1COMMIT语句109 5.2.2ROLLBACK语句109 5.2.3SET TRANSACTION 语句110 5.3自治事务111 5.3.1声明自治事务113 5.3.2从SQL中调用自治函数115 第6章动态SQL语句116 6.1动态SQL语句概述116 6.2Native dynamic SQL118 6.2.1EXECUTE IMMEDIATE语句119 6.2.2OPEN FOR、FETCH和CLOSE语句124 6.2.3重复的占位符名称125 6.3DBMS_SQL包127 6.3.1DBMS_SQL包中的常用方法127 6.3.2DBMS_SQL包操作流程128 6.3.3其他常用DBMS_SQL方法131 6.4SQL注入136 6.4.1SQL注入技术136 6.4.2防范SQL注入139 第7章异常处理142 7.1异常处理的概念和术语142 7.1.1异常种类143 7.1.2异常处理程序的优点143 7.2定义异常145 7.2.1系统预定义异常145 7.2.2用户自定义异常147 7.2.3重新声明预定义的异常148 7.3引发异常149 7.3.1显式触发异常149 7.3.2异常传播153 7.3.3未处理的异常160 7.4处理异常161 7.4.1处理异常的措施161 7.4.2检索异常信息162 7.4.3异常捕获165 7.4.4获取异常状态信息168 7.4.5检查断言169 第8章PL/SQL中的输入与输出171 8.1显示信息(DBMS_OUTPUT)171 8.1.1启用DBMS_OUTPUT171 8.1.2向缓冲区输入信息172 8.1.3从缓冲区读取信息173 8.2文件读写174 8.2.1启动UTL_FILE174 8.2.2UTL_FILE方法174 8.3使用基于Web的数据(http)177 8.3.1UTL_HTTP数据类型177 8.3.2UTL_HTTP方法178 8.3.3http数据类型181 8.3.4http方法183 第9章PL/SQL子程序187 9.1子程序概述187 9.1.1子程序的分类187 9.1.2子程序的优点187 9.2独立子程序188 9.2.1子程序结构188 9.2.2创建函数189 9.2.3创建存储过程190 9.2.4支持的参数192 9.2.5调用与使用195 9.2.6支持的返回值类型197 9.3嵌套子程序200 9.3.1概述200 9.3.2声明和定义201 9.3.3支持的参数203 9.3.4调用与变量204 9.4子程序重载205 9.5表函数206 9.5.1结果返回行集合206 9.5.2结果返回集合数据类型209 第10章用户自定义对象211 10.1用户自定义对象概述211 10.2创建用户自定义对象211 10.2.1对象类型211 10.2.2对象实例215 10.3在PL/SQL中使用自定义对象216 10.3.1定义对象216 10.3.2初始化对象216 10.3.3调用构造函数217 10.3.4调用MEMBER方法和STATIC方法217 10.3.5对象表的DML操作218 10.4与Oracle数据库中对象类型的差异219 第11章用户自定义聚集函数222 11.1用户自定义聚集函数概述222 11.1.1聚集函数222 11.1.2创建用户自定义聚集函数223 11.2用户自定义聚集函数的运用224 11.2.1场景数据224 11.2.2创建用户自定义聚集函数225 11.2.3用户自定义聚集函数的使用226 11.2.4查看用户自定义聚集函数信息227 11.3KingbaseES与Oracle中创建聚集函数的差异228 第12章程序包232 12.1程序包概述232 12.1.1包的概念232 12.1.2包的优点232 12.1.3系统内置包233 12.2创建程序包233 12.2.1包的组成233 12.2.2包的创建235 12.3程序包的使用239 12.3.1包元素的调用规则239 12.3.2包数据240 12.3.3包游标240 12.3.4查看程序包信息242 第13章触发器247 13.1触发器简介247 13.1.1触发器的概念247 13.1.2触发器的作用248 13.1.3触发器的种类248 13.2DML触发器248 13.2.1DML触发器的用途248 13.2.2创建DML触发器248 13.2.3触发器体250 13.2.4INSTEAD OF触发器253 13.2.5触发器触发的顺序254 13.3事件触发器254 13.3.1事件触发器概述254 13.3.2创建事件触发器255 13.4触发器设计注意事项255 13.5触发器管理256 13.5.1禁用与启用触发器256 13.5.2修改、重编译与删除触发器257 13.5.3触发器信息查询257 第14章PL/SQL的代码加密259 14.1PL/SQL代码加密概述259 14.2Wrapper260 14.2.1使用PL/SQL Wrapper实用程序260 14.2.2PL/SQL Wrapper 实用程序的输入与输出文件260 14.2.3PL/SQL Wrapper加密的优点和局限性261 14.2.4示例261 14.3DBMS_DDL包的使用264 14.3.1使用DBMS_DDL子程序264 14.3.2DBMS_DDL加密的局限性264 14.3.3示例264 第15章PL/SQL的调试266 15.1PL/SQL的执行跟踪266 15.1.1DBMS_UTILITY267 15.1.2性能监控271 15.2PL/SQL调试器277 15.2.1函数/存储过程调试277 15.2.2触发器调试283 15.2.3程序包调试285 第16章PL/SQL任务的调度与执行290 16.1使用DBMS_JOB包管理任务290 16.1.1任务的创建291 16.1.2任务的执行296 16.1.3任务的删除297 16.2使用DBMS_SCHEDULER包管理任务299 16.2.1任务的创建299 16.2.2任务的执行304 16.2.3任务的删除304 16.3使用KStudio管理任务307 16.3.1任务的创建307 16.3.2任务的执行308 16.3.3任务的删除309 参考文献312