Oracle9i是Oracle公司于2001年推出的最新版本的大型关系型数据库管理系统,它加强了用于电子商务环境的一系列特定功能,并提供了更好的可用性、可伸缩性、安全性、可管理性的开发平台。
全书包括23章,由浅入深地介绍了PL/SQL编程及其技巧。本书在向读者介绍基本PL/SQL的同时,还融合了很多Oracle9i中才有的PL/SQL新特性。本书内容划分为三大部分,首先是基础知识,介绍了PL/SQL简介、PL/SQL基础、控制结构、SQL基本命令、Oracle内置函数、自创建过程和函数、包和异常处理等内容;第二部分为应用开发,介绍了游标技术、触发器、集合、对象、本机动态SQL以及文件读写;最后一部分为高级部分介绍了会话间通信、Oracle高级队列、作业管理、大型对象、开发Web程序以及性能优化等PL/SQL高级技术。
\r\n
前言\r\n\r\n第1章 PL/SQL简介\r\n\r\n1.1 什么是PL/SQL\r\n1.2 PL/SQL功能特性\r\n1.2.1 块结构\r\n1.2.2 变量和类型\r\n1.2.3 程序控制结构\r\n1.2.4 游标\r\n1.2.5 过程和函数\r\n1.2.6 包\r\n1.2.7 动态SQL\r\n1.2.8 对象类型\r\n1.2.9 集合\r\n1.2.10 内置包\r\n1.3 Oracle 9i的 PL/SQL新特性\r\n1.4 使用SQL*Plus\r\n1.5 使用SQL*Plus Worksheet\r\n1.6 小结\r\n1.7 练习\r\n\r\n第2章 PL/SQL基础\r\n\r\n2.1 PL/SQL程序结构\r\n2.1.1 PL/SQL块的类型\r\n2.1.2 PL/SQL块的结构\r\n2.1.3 词法单位\r\n2.2 变量声明\r\n作用域和可见性\r\n2.3 PL/SQL变量类型\r\n2.3.1 数字型\r\n2.3.2 字符型\r\n2.3.3 国际化字符类型\r\n2.3.4 LOB(大型对象)类型\r\n2.3.5 布尔(BOOLEAN)类型\r\n2.3.6 日期和时间间隔(Datetime和Interval)类型\r\n2.3.7 复合类型\r\n2.3.8 引用类型\r\n2.3.9 用户自定义类型\r\n2.4 数据类型转换\r\n2.4.1 显式转换(Explicit Conversion)\r\n2.4.2 隐式转换(Implicit Conversion)\r\n2.4.3 隐式转换和显式转换的比较\r\n2.5 PL/SQL表达式\r\n2.5.1 运算符的优先级\r\n2.5.2 字符表达式\r\n2.5.3 布尔表达式\r\n2.5.4 CASE表达式\r\n2.5.5 在比较和条件语句中处理NULL值\r\n2.6 PL/SQL运算符\r\n2.6.1 算术运算符\r\n2.6.2 逻辑运算符\r\n2.6.3 比较运算符\r\n2.6.4 字符串运算符\r\n2.6.5 用户自定义运算符\r\n2.7 小结\r\n2.8 练习\r\n\r\n第3章 表和记录\r\n\r\n3.1 表\r\n3.2 记录\r\n3.2.1 记录的定义\r\n3.2.2 记录赋值\r\n3.3 %TYPE和%ROWTYPE\r\n3.3.1 使用%TYPE类型\r\n3.3.2 使用%ROWTYPE类型\r\n3.4 伪列\r\n3.4.1 CURRVAL和NEXTVAL伪列\r\n3.4.2 ROWID伪列\r\n3.4.3 ROWNUM伪列\r\n3.5 小结\r\n3.6 练习\r\n\r\n第4章 PL/SQL控制结构\r\n\r\n4.1 条件控制\r\n4.1.1 IF-THEN语旬\r\n4.1.2 IF-THEN-ELSE语句\r\n4.1.3 IF-THEN-ELSIF语句\r\n4.1.4 CASE语句\r\n4.1.5 搜索CASE语句\r\n4.1.6 条件语句使用指导\r\n4.2 循环结构\r\n4.2.1 LOOP循环\r\n4.2.2 WHILE-LOOP循环\r\n4.2.3 FOR循环\r\n4.2.4 循环语句使用指导\r\n4.3 顺序结构\r\n4.3.1 GOTO语句\r\n4.3.2 NULL语句\r\n4.4 小结\r\n4.5 练习\r\n\r\n第5章 SQL基本命令\r\n\r\n5.1 SQL基本命令分类\r\n5.2 数据定义语言(DDL)\r\n5.3 数据操纵语言(DML)\r\n5.3.1 INSERT语句\r\n5.3.2 SELECT语句\r\n5.3.3 UPDATE语句\r\n5.3.4 DELETE语句\r\n5.3.5 LOCK TABLE命令\r\n5.4 事务控制命令\r\n5.4.1 SET TRANSACTION\r\n5.4.2 COMMIT与ROLLBACK\r\n5.4.3 SAVE POINT\r\n5.5 会话控制命令\r\n5.5.1 ALTER SESSION命令\r\n5.5.2 SET ROLE命令\r\n5.6 系统控制命令\r\n5.7 小结\r\n5.8 练习\r\n\r\n第6章 Oracle内置SQL函数\r\n\r\n6.1 错误报告(Error Reporing)函数\r\n6.2 数值(Number)函数\r\n6.2.1 BITAND\r\n6.2.2 CEIL\r\n6.2.3 FLOOR\r\n6.2.4 SIGN\r\n6.2.5 ROUND\r\n6.2.6 TRUNC\r\n6.3 字符(Character)函数\r\n6.3.1 CONCAT\r\n6.3.2 INSTR\r\n6.3.3 LPAD\r\n6.3.4 LTRIM\r\n6.3.5 NLS_INITCAP\r\n6.3.6 NLS_LOWER\r\n6.3.7 NLS_UPPER\r\n6.3.8 NLSSORT\r\n6.3.9 REPLACE\r\n6.3.10 SOUNDEX\r\n6.3.11 SUBSTR\r\n6.3.12 TRANSLATE\r\n6.3.13 TRIM\r\n6.4 转换(Conversion)函数\r\n6.4.1 CONVERT\r\n6.4.2 TO_CHAR\r\n6.4.3 TO_CLOB\r\n6.4.4 TO_DATE\r\n6.4.STO_MULTI_BYTE\r\n6.4.6 TO_SINGLE_BYTE\r\n6.4.7 TO_ NUMBER\r\n6.5 日期(Date)函数\r\n6.5.1 SYSDATE函数\r\n6.5.2 ADD_MONTHS函数\r\n6.5.3 CURRENT_DATE函数\r\n6.5.4 CURRENT_TIMESTAMP函数\r\n6.5.5 DBTIMEZONE函数\r\n6.5.6 EXTRACT函数\r\n6.5.7 FROM_TZ函数\r\n6.5.8 LOCALTIMESTAMP函数\r\n6.5.9 MONTHS_BETWEEN函数\r\n6.5.10 NEW_TIME函数\r\n6.5.11 NEXT_DAY函数\r\n6.5.12 NUMTODSINTERVAL函数\r\n6.5.13 NUMTOYMINTERVAL函数\r\n6.5.14 ROUND函数\r\n6.5.15 SESSIONTIMEZONE函数\r\n6.5.16 SYSTIMESTAMP函数\r\n6.5.17 TO_DSINTERVAL函数\r\n6.5.18 TO_TIMESTAMP函数\r\n6.5.19 TO_TIMESTAMP_TZ函数\r\n6.5.20 TO_YMINTERVAL函数\r\n6.5.21 TZ_OFFSET函数\r\n6.5.22 TRUNC函数\r\n6.6 分组(Group)函数\r\n6.6.1 STDDEV函数\r\n6.6.2 VARIANCE函数\r\n6.7 杂项(Misc)函数\r\n6.7.1 DECODE函数\r\n6.7.2 DUMP函数\r\n6.7.3 GREATEST函数\r\n6.7.4 LEAST函数\r\n6.7.5 NVL函数\r\n6.8 小结\r\n6.9 练习\r\n\r\n第7章 过程与函数\r\n\r\n7.1 使用过程\r\n7.1.1 创建过程\r\n7.1.2 调用过程\r\n7.1.3 重新编译过程\r\n7.1.4 删除过程\r\n7.2 使用函数\r\n7.2.1 函数的定义\r\n7.2.2 RETURN语句\r\n7.2.3 调用函数\r\n7.2.4 删除函数\r\n7.3 子程序\r\n7.3.1 内置子程序\r\n7.3.2 本地子程序\r\n7.4 递归\r\n7.5 小结\r\n7.6 练习\r\n\r\n第8章 包\r\n\r\n8.1 包的概念\r\n8.2 包的规范与创建\r\n8.2.1 使用包的优势\r\n8.2.2 理解包规范\r\n8.2.3 理解包体\r\n8.3 包的调用\r\n8.4 包的重新编译和重载\r\n8.4.1 包的重新编译\r\n8.4.2 包的重载\r\n8.5 小结\r\n8.6 练习\r\n\r\n第9章 异常处理\r\n\r\n9.1 什么是异常\r\n9.2 PL/SQL预定义异常\r\n9.3 PL/SQL的异常处理结构\r\n9.3.1 异常的触发\r\n9.3.2 异常的传播\r\n9.4 自定义异常\r\n9.4.1 声明异常\r\n9.4.2 使用编译指令EXCEPTION_INIT\r\n9.4.3 使用RAISE_APPLICATION_ERROR\r\n9.4.4 使用错误函数SQLCODE和SQLERRM\r\n9.5 小结\r\n9.6 练习\r\n\r\n第10章 游标\r\n\r\n10.1 什么是游标\r\n10.2 显式游标\r\n10.2.1 声明游标\r\n10.2.2 打开游标(OPEN CURSOR)\r\n10.2.3 提取游标(FETCH CURSOR)\r\n10.2.4 关闭游标(CLOSE CURSOR)\r\n10.2.5 显式游标的属性\r\n10.2.6 在游标中使用子查询\r\n10.2.7 在包中使用游标\r\n10.3 隐式游标\r\n10.4 游标提取循环\r\n10.4.1 基本循环(LOOP…END LOOP)\r\n10.4.2 WHILE循环\r\n10.4.3 FOR循环(CURSOR FOR LOOP)\r\n10.4.4 SELECT FOR UPDATE游标\r\n10.5 游标变量\r\n10.5.1 声明游标变量\r\n10.5.2 控制游标变量\r\n10.5.3 使用游标变量的限制\r\n10.6 小结\r\n10.7 练习\r\n\r\n第11章 触发器\r\n\r\n11.1 触发器\r\n11.2 DML触发器\r\n11.2.1 创建DML触发器\r\n11.2.2 访问行触发器中的列值\r\n11.2.3 条件谓词\r\n11.3 使用DML触发器\r\n11.3.1 维护数据完整性\r\n11.3.2 维护修改的历史日志\r\n11.4 系统触发器\r\n11.4.1 创建系统触发器\r\n11.4.2 事件属性\r\n11.4.3 系统触发器的例子\r\n11.5 替代触发器\r\n11.5.1 替代触发器的创建\r\n11.5.2 替代触发器的编写\r\n11.5.3 视图所包括的嵌套表上的列的触发器\r\n11.6 触发器的例外\r\n11.6.1 在触发器体的错误条件和例外\r\n11.6.2 触发器和处理远程的例外\r\n11.7 小结\r\n11.8 练习\r\n\r\n第12章 事务管理和锁定\r\n\r\n12.1 事务管理\r\n12.1.1 COMMIT(提交)\r\n12.1.2 ROLLBACK(回滚)\r\n12.1.3 SAVEPOINT(保存点)\r\n12.1.4 SET TRANSACTION\r\n12.1.5 分布式事务的管理\r\n12.1.6 RELEASE\r\n12.2 锁定\r\n12.2.1 表锁定\r\n12.2.2 锁定记录\r\n12.2.3 显式的锁定\r\n12.2.4 其他的锁定\r\n12.2.5 DBMS_LOCK包\r\n12.3 小结\r\n12.4 练习\r\n\r\n第13章 集合\r\n\r\n13.1 集合概述\r\n13.2 索引表\r\n13.2.1 定义索引表\r\n13.2.2 向索引表中插入数据\r\n13.2.3 引用索引表的值\r\n13.3 嵌套表\r\n13.3.1 声明嵌套表\r\n13.3.2 嵌套表的初始化和赋值\r\n13.3.3 数据库中的嵌套表\r\n13.4 变长数组\r\n13.4.1 定义变长数组\r\n13.4.2 初始化变长数组\r\n13.4.3 数据库中的数组\r\n13.5 使用集合方法\r\n13.5.1 EXISTS方法\r\n13.5.2 COUNT方法\r\n13.5.3 LIMIT方法\r\n13.5.4 FIRST和LAST方法\r\n13.5.5 PRIOR和NEXT方法\r\n13.5.6 EXTED方法\r\n13.5.7 DELETE和TRIM方法\r\n13.5.8 把方法用于集合参数\r\n13.6 集合的异常处理\r\n13.7 批联编\r\n13.7.1 使用FORALL语句\r\n13.7.2 使用BULK COLLECT\r\n13.8 小结\r\n13.9 练习\r\n\r\n第14章 PL/SQL对象类型\r\n\r\n14.1 面向对象的基本概念\r\n14.1.1 对象(Object)\r\n14.1.2 类(Class)\r\n14.1.3 继承(Inheritance)\r\n14.1.4 多态性\r\n14.2 对象类型\r\n14.2.1 为什么使用对象\r\n14.2.2 对象类型的结构\r\n14.2.3 对象类型的组成\r\n14.3 定义对象类型\r\n14.3.1 对象类型的定义\r\n14.3.2 SELF参数\r\n14.3.3 PL/SQL的继承\r\n14.3.4 更改和删除对象类型\r\n14.4 声明并初始化对象\r\n14.4.1 声明对象\r\n14.4.2 构造函数与初始化对象\r\n14.5 对象的使用\r\n14.5.1 存取属性\r\n14.5.2 调用构造函数\r\n14.5.3 调用方法\r\n14.6 按列存储对象\r\n14.7 对象表\r\n14.7.1 创建对象表\r\n14.7.2 向对象表中添加对象\r\n14.7.3 检索对象表中的对象\r\n14.7.4 更新对象表\r\n14.7.5 删除对象表的对象\r\n14.8 共享对象\r\n14.8.1 引用\r\n14.8.2 REF和DEREF函数\r\n14.8.3 前期类型定义\r\n14.9 比较对象\r\n14.9.1 MAP方法\r\n14.9.2 ORDER方法\r\n14.9.3 指导要点\r\n14.10 小结\r\n14.11 练习\r\n\r\n第15章 跟踪和调试\r\n\r\n15.1 调试语法错误\r\n15.2 调试逻辑错误\r\n15.2.1 逻辑错误例子\r\n15.2.2 逻辑错误解决\r\n15.3 使用工具调试程序\r\n15.3.1 在程序中插入调试用表\r\n15.3.2 DBMS_OUTPUT包\r\n15.4 程序的规划与代码编写\r\n15.4.1 程序结构的规划\r\n15.4.2 编制代码\r\n15.4.3 格式化代码\r\n15.5 小结\r\n15.6 练习\r\n\r\n第16章 本机动态SQL\r\n\r\n16.1 什么是动态SQL\r\n16.2 动态SQL的两种方法\r\n16.3 使用EXECUTE IMMEDIATE语句\r\n16.3.1 执行DDL\r\n16.3.2 执行PL/SQL块\r\n16.3.3 绑定变量\r\n16.4 使用OPEN-FOR、FETCH和CLOSE语句\r\n16.5 使用批动态SQL\r\n16.5.1 批EXECUTE IMMEDIATE\r\n16.5.2 批FETCH\r\n16.5.3 批FORALL\r\n16.6 动态SQL的技巧\r\n16.6.1 改进性能\r\n16.6.2 使用重复的占位符\r\n16.6.3 使用游标属性\r\n16.6.4 传递Null参数\r\n16.6.5 远程操作\r\n16.6.6 使用调用者特权\r\n16.6.7 避免死锁\r\n16.7 小结\r\n16.8 练习\r\n\r\n第17章 输入与输出\r\n\r\n17.1 DBMS_OUTPUT包\r\n17.1.1 使用DBMS_OUTPUT包\r\n17.1.2 启用DBMS_OUTPUT包\r\n17.1.3 关闭DBMS_OUTPUT包\r\n17.1.4 将数据写到缓冲区\r\n17.1.5 从缓冲区中读取数据\r\n17.1.6 应用举例\r\n17.2 UTL_FILE包\r\n17.2.1 安全性\r\n17.2.2 使用UTL_FILE包函数与文件I/O步骤\r\n17.2.3 UTL_FILE引发的异常\r\n17.2.4 文件的打开与关闭\r\n17.2.5 文件输出\r\n17.2.6 文件输入\r\n17.3 小结\r\n17.4 练习\r\n\r\n第18章 会话间通信\r\n\r\n18.1 DBMS_SESSION\r\n18.1.1 SET_IDENTIFIER\r\n18.1.2 SET_CONTEXT\r\n18.1.3 CLEAR_CONTEXT\r\n18.1.4 CLEAR_IDENTIFIER\r\n18.1.5 SET_ROLE\r\n18.1.6 SET_SQL_TRACE\r\n18.1.7 SET_NLS\r\n18.1.8 CLOSE_DATABASE_LINK\r\n18.1.9 RESET_PACKAGE\r\n18.1.10 UNIQUE_SESSION_ID函数\r\n18.1.11 IS_ROLE_ENABLED函数\r\n18.1.12 IS_SESSION_ALIVE函数\r\n18.1.13 SET_CLOSE_CACHED_OPEN_CURSORS\r\n18.1.14 FREE_UNUSED_USER_MEMORY\r\n18.1.15 LIST_CONTEXT\r\n18.1.16 SWITCH_CURRENT_CONSUMER_GROUP\r\n18.2 DBMS_ALERT\r\n18.2.1 包DBMS_ALERT中常量的定义\r\n18.2.2 常见错误\r\n18.2.3 报警使用机制\r\n18.2.4 检查报警\r\n18.2.5 DBMS_ALERT子程序的概述\r\n18.3 DBMS_PIPE\r\n18.3.1 公有管道和私有管道\r\n18.3.2 DBMS_PIPE子程序的概述\r\n18.4 小结\r\n18.5 练习\r\n\r\n第19章 高级队列\r\n\r\n19.1 高级队列简介\r\n19.1.1 异步消息通知\r\n19.1.2 监听功能\r\n19.1.3 传播特征\r\n19.1.4 队列监视\r\n19.2 队列使用\r\n19.2.1 为负载定义一个类型\r\n19.2.2 CREATE_QUEUE_TABLE\r\n19.2.3 ALTER_QUEUE_TABLE\r\n19.2.4 DROP_QUEUE_TABLE\r\n19.2.5 CREATE_QUEUE\r\n19.2.6 CREATE_NP_QUEUE\r\n19.2.7 ALTER_QUEUE\r\n19.2.8 DROP_QUEUE\r\n19.2.9 START_QUEUE\r\n19.2.10 STOP_QUEUE\r\n19.2.11 ENQUEUE\r\n19.2.12 DEQUEUE\r\n19.2.13 Message Properties\r\n19.2.14 记录ENQUEUE_OPTIONS_T\r\n19.2.15 AQ$_AGENT对象类型\r\n19.2.16 AQ$_RECIPIENT_LIST_T对象类型\r\n19.2.17 Dequeue Options Type\r\n19.3 其他AQ过程\r\n19.3.1 GRANT_SYSTEM_PRIVILEGE\r\n19.3.2 REVOKE_SYSTEM_PRIVILEGE\r\n19.3.3 GRANT_QUEUE_PRIVILEGE\r\n19.3.4 REVOKE_QUEUE_PRIVILEGE\r\n19.4 AQ中级知识\r\n19.4.1 订阅者列表和接收者列表\r\n19.4.2 订阅者列表\r\n19.4.3 接收者列表\r\n19.4.4 AQ执行发布/订阅\r\n19.4.5 AQ Recipient List Type(接收者列表数据类型)\r\n19.4.6 AQ Agent List Type(代理列表类型)\r\n19.4.7 AQ Subscriber List Type(订阅者列表类型)\r\n19.4.8 AQ Registration Info Type(AQ注册信息类型)\r\n19.4.9 AQ Registration Info List Type\r\n19.4.10 LISTEN过程\r\n19.4.11 REGISTER过程\r\n19.4.12 UNREGISTER过程\r\n19.4.13 ADD_SUBSCRIBER过程\r\n19.4.14 ALTER_SUBSCRIBER过程\r\n19.4.15 REMOVE_SUBSCRIBER过程\r\n19.4.16 SCHEDULE_PROPAGATION过程\r\n19.4.17 UNSCHEDULE_PROPAGATION过程\r\n19.4.18 VERIFY_QUEUE_TYPES过程\r\n19.4.19 ALTER_PROPAGATION_SCHEDULE过程\r\n19.4.20 ENABLE_PROPAGATION_SCHEDULE过程\r\n19.4.21 DISABLE_PROPAGATION_SCHEDULE过程\r\n19.5 AQ实例\r\n19.5.1 创建队列表和队列\r\n19.5.2 消息入队出队\r\n19.5.3 消息传播\r\n19.5.4 删除AQ对象\r\n19.6 小结\r\n19.7 练习\r\n\r\n第20章 数据库作业管理\r\n\r\n20.1 如何运行作业\r\n20.2 管理作业队列\r\n20.2.1 DBMS_JOB包\r\n20.2.2 作业环境(Job Environment)\r\n20.2.3 作业的导入导出(Import/Export)\r\n20.3 小结\r\n20.4 练习\r\n\r\n第21章 大型对象\r\n\r\n21.1 大型对象类型概述\r\n21.1.1 什么是大型对象\r\n21.1.2 大型对象数据类型\r\n21.1.3 可变宽度(Varying-Width)字符数据\r\n21.1.4 大型对象值和定位器\r\n21.1.5 创建包含大型对象的表\r\n21.2 Oracle 9i中大型对象的新特征\r\n21.3 用PL/SQL的DBMS_上OB包\r\n21.3.1 DBMS_LOB包函数/过程介绍\r\n21.3.2 DBMS_LOB包的大型对象定位器\r\n21.3.3 DBMS_LOB包的数据类型常数及异常\r\n21.3.4 DBMS_LOB包的规则和限制\r\n21.4 使用外部大型对象BFILE\r\n21.4.1 创建目录对象\r\n21.4.2 打开BFILE\r\n21.4.3 函数FILEISOPEN\r\n21.4.4 函数FILEEXISTS\r\n21.4.5 关闭文件的过程\r\n21.4.6 获得文件信息\r\n21.4.7 读文件操作\r\n21.4.8 比较两个文件内容\r\n21.4.9 INSTR函数\r\n21.4.10 SUBSTR函数\r\n21.5 使用外部大型对象BFILE的范例\r\n21.6 使用内部大型对象\r\n21.6.1 APPEND过程\r\n21.6.2 COMPARE函数\r\n21.6.3 COPY过程\r\n21.6.4 EMPTY_BLOB和EMPTY_CLOB函数\r\n21.6.5 ERASE过程\r\n21.6.6 GETLENGTH函数\r\n21.6.7 INSTR函数\r\n21.6.8 READ过程\r\n21.6.9 SUBSTR函数\r\n21.6.10 TRIM过程\r\n21.6 11 WRITE过程\r\n21.6.12 WRITEAPPEND过程\r\n21.7 使用内部大型对象的范例\r\n21.7.1 向内部LOB拷贝数据\r\n21.7.2 向内部LOB中添加数据\r\n21.7.3 分析内部LOB内容\r\n21.7.4 编辑内部LOB对象\r\n21.8 临时大型对象\r\n21.8.1 临时大型对象概述\r\n21.8.2 临时大型对象的使用\r\n21.9 LONG与LOB数据类型\r\n21.9.1 LONG与LOB数据类型的比较\r\n21.9.2 LONG与LOB数据类型的转换\r\n21.10 小结\r\n21.11 练习\r\n\r\n第22章 开发Web应用程序\r\n\r\n22.1 PL/SQL Web应用程序概念\r\n22.1.1 使用PL/SQL存储过程和函数\r\n22.1.2 PL/SQL Server Pages\r\n22.1.3 为XML启用PL/SQL Web应用程序\r\n22.2 设置和检验PL/SQL服务器页\r\n22.2.1 安装Oracle HTTP Server\r\n22.2.2 创建一个PSP文件\r\n22.2.3 将PSP文件导入到数据库\r\n22.2.4 设置Oracle HTTP Server\r\n22.2.5 从浏览器中调用PSP\r\n22.3 PL/SQL Web应用程序的参数传递\r\n22.3.1 从HTML表单中传递列表框或微调框参数\r\n22.3.2 从HTML表单中传递单选按钮或复选框参数\r\n22.3.3 从HTML表单传递输入域参数\r\n22.3.4 从HTML表单中传递隐藏参数的值\r\n22.3.5 提交一张完整的HTML表单\r\n22.3.6 从HTML表单中处理丢失的输入\r\n22.3.7 在网页之间维护状态信息\r\n22.4 在PL/SQL存储过程中执行网络操作\r\n22.4.1 从PL/SQL中发送邮件\r\n22.4.2 从PL/SQL中得到一个主机名或地址\r\n22.4.3 在PL/SQL中操作TCP/IP连接\r\n22.4.4 从PL/SQL中检索一个HTTP URL的内容\r\n22.4.5 操作表格、图像、Cookies和CGI变量\r\n22.5 PL/SQL Server Pages\r\n22.5.1 选择一个软件配置\r\n22.5.2 为PL/SQL服务器页编写代码和内容\r\n22.5.3 把PL/SQL服务器页装载到数据库存储过程\r\n22.6 PL/SQL Server Pages实例\r\n22.6.1 一次性显示表的内容\r\n22.6.2 使用循环打印表的内容\r\n22.6.3 用户选择\r\n22.6.4 调用PL/SQL服务器页的HTML表单\r\n22.6.5 在PSP文件中包含JavaScript\r\n22.6.6 调试PL/SQL Server Pages\r\n22.6.7 将PSP应用程序加入产品\r\n22.7 小结\r\n22.8 练习\r\n\r\n第23章 调整PL/SQL应用程序\r\n\r\n23.1 PL/SQL性能问题的原因\r\n23.2 识别PL/SQL性能问题\r\n23.2.1 剖析API:DBMS_PROFILER包\r\n23.2.2 跟踪API:DBMS_TRACE包\r\n23.3 性能调整的PL/SQL特征\r\n23.3.1 通过本机动态SQL改进PL/SQL性能\r\n23.3.2 通过批联编提高PL/SQL性能\r\n23.3.3 使用NOCOPY编译器提示来提高PL/SQL性能\r\n23.3.4 使用RETURNING子句提高PL/SQL性能\r\n23.3.5 使用外部程序提高PL/SQL性能\r\n23.3.6 使用对象类型和集合来提高PL/SQL性能\r\n23.3.7 编译PL/SQL代码以便于本地执行\r\n23.4 小结\r\n\r\n附录一 PL/SQL保留字\r\n附录二 部分练习答案\r\n附录三 部分表结构\r\n附录四 SQL*Plus的使用\r\n\r\nF4.1 启动SQL*Plus\r\nF4.2 输入和执行命令\r\nF4.3 编辑SQL命令\r\nF4.4 创建和修改命令文件\r\nF4.5 环境变量的设置和保存\r\nF4.6 编写交互命令\r\nF4.7 格式化查询结果