图书介绍
Oracle9i PL/SQL从入门到精通2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

- 谈竹贤等编著 著
- 出版社: 北京:中国水利水电出版社
- ISBN:7508410556
- 出版时间:2002
- 标注页数:613页
- 文件大小:29MB
- 文件页数:635页
- 主题词:Oracle
PDF下载
下载说明
Oracle9i PL/SQL从入门到精通PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 PL/SQL简介1
1.1 什么是PL/SQL1
1.2.2 变量和类型2
1.2.1 块结构2
1.2 PL/SQL功能特性2
1.2.5 过程和函数3
1.2.4 游标3
1.2.3 程序控制结构3
1.2.10 内置包4
1.2.9 集合4
1.2.6 包4
1.2.7 动态SQL4
1.2.8 对象类型4
1.3 Oracle 9i的 PL/SQL新特性5
1.4 使用SQL*Plus6
1.5 使用SQL*Plus Worksheet10
1.7 练习11
1.6 小结11
2.1.1 PL/SQL块的类型12
2.1 PL/SQL程序结构12
第2章 PL/SQL基础12
2.1.2 PL/SQL块的结构15
2.1.3 词法单位17
2.2 变量声明24
作用域和可见性26
2.3 PL/SQL变量类型28
2.3.1 数字型29
2.3.2 字符型31
2.3.3 国际化字符类型34
2.3.4 LOB(大型对象)类型36
2.3.5 布尔(BOOLEAN)类型37
2.3.6 日期和时间间隔(Datetime和Interval)类型38
2.3.9 用户自定义类型41
2.3.8 引用类型41
2.3.7 复合类型41
2.4.2 隐式转换(Implicit Conversion)43
2.4.1 显式转换(Explicit Conversion)43
2.4 数据类型转换43
2.5.1 运算符的优先级45
2.5 PL/SQL表达式45
2.4.3 隐式转换和显式转换的比较45
2.5.2 字符表达式46
2.5.3 布尔表达式47
2.5.4 CASE表达式48
2.5.5 在比较和条件语句中处理NULL值50
2.6.1 算术运算符52
2.6 PL/SQL运算符52
2.6.2 逻辑运算符53
2.6.3 比较运算符55
2.6.5 用户自定义运算符57
2.6.4 字符串运算符57
2.8 练习58
2.7 小结58
3.1 表59
第3章 表和记录59
3.2.1 记录的定义61
3.2.2 记录赋值63
3.3.1 使用%TYPE类型65
3.3 %TYPE和%ROWTYPE65
3.3.2 使用%ROWTYPE类型66
3.4.2 ROWID伪列68
3.4.1 CURRVAL和NEXTVAL伪列68
3.4 伪列68
3.6 练习69
3.5 小结69
3.4.3 ROWNUM伪列69
4.1.1 IF-THEN语旬70
4.1 条件控制70
第4章 PL/SQL控制结构70
4.1.2 IF-THEN-ELSE语句71
4.1.3 IF-THEN-ELSIF语句72
4.1.4 CASE语句73
4.1.5 搜索CASE语句75
4.1.6 条件语句使用指导76
4.2.1 LOOP循环78
4.2 循环结构78
4.2.2 WHILE-LOOP循环80
4.2.3 FOR循环81
4.3 顺序结构87
4.2.4 循环语句使用指导87
4.3.1 GOTO语句88
4.3.2 NULL语句91
4.4 小结92
4.5 练习93
5.1 SQL基本命令分类94
第5章 SQL基本命令94
5.2 数据定义语言(DDL)96
5.3.1 INSERT语句98
5.3.2 SELECT语句99
5.3.4 DELETE语句101
5.3.3 UPDATE语句101
5.3.5 LOCK TABLE命令102
5.4.1 SET TRANSACTION103
5.4 事务控制命令103
5.5 会话控制命令104
5.4.3 SAVE POINT104
5.4.2 COMMIT与ROLLBACK104
5.5.2 SET ROLE命令105
5.5.1 ALTER SESSION命令105
5.6 系统控制命令106
5.7 小结107
5.8 练习108
6.1 错误报告(Error Reporting)函数109
第6章 Oracle内置SQL函数109
6.2 数值(Number)函数110
6.2.1 BITAND111
6.2.6 TRUNC112
6.2.5 ROUND112
6.2.2 CEIL112
6.2.3 FLOOR112
6.2.4 SIGN112
6.3.1 CONCAT113
6.3 字符(Character)函数113
6.3.3 LPAD114
6.3.2 INSTR114
6.3.7 NLS_UPPER115
6.3.6 NLS-LOWER115
6.3.4 LTRIM115
6.3.5 NLS_INITCAP115
6.3 10 SOUNDEX116
6.3.9 REPLACE116
6.3.8 NLSSORT116
6.3.12 TRANSLATE117
6.3.11 SUBSTR117
6.4 转换(Conversion)函数118
6.3.13 TRIM118
6.4.2 TO_CHAR119
6.4.1 CONVERT119
6.4.4 TO_DATE122
6.4.3 TO_CLOB122
6.5 日期(Date)函数123
6.4.7 TO_ NUMBER123
6.4.5 STO_MULTI_BYTE123
6.4.6 TO_SINGLE_BYTE123
6.5.1 SYSDATE函数124
6.5.4 CURRENT_TIMESTAMP函数125
6.5.3 CURRENT_DATE函数125
6.5.2 ADD_MONTHS函数125
6.5.8 LOCALTIMESTAMP函数126
6.5.7 FROM_TZ函数126
6.5.5 DBTIMEZONE函数126
6.5.6 EXTRACT函数126
6.5.10 NEW_TIME函数127
6.5.9 MONTHS_BETWEEN函数127
6.5.12 NUMTODSINTERVAL函数128
6.5.11 NEXT_DAY函数128
6.5.15 SESSIONTIMEZONE函数129
6.5.14 ROUND函数129
6.5.13 NUMTOYMINTERVAL函数129
6.5.19 TO_TIMESTAMP_TZ函数130
6.5.18 TO_TIMESTAMP函数130
6.5.17 TO_DSINTERVAL函数130
6.6 分组(Group)函数131
6.5.22 TRUNC函数131
6.5.20 TO_YMINTERVAL函数131
6.5.21 TZ_OFFSET函数131
6.6.2 VARIANCE函数132
6.6.1 STDDEV函数132
6.7.1 DECODE函数133
6.7 杂项(Misc)函数133
6.7.3 GREATEST函数134
6.7.2 DUMP函数134
6.7.5 NVL函数135
6.7.4 LEAST函数135
6.9 练习136
6.8 小结136
7.1 使用过程137
第7章 过程与函数137
7.1.1 创建过程138
7.1.2 调用过程141
7.2 使用函数143
7.1.4 删除过程143
7.1.3 重新编译过程143
7.2.1 函数的定义144
7.2.3 调用函数146
7.3 子程序147
7.2.4 删除函数147
7.3.1 内置子程序148
7.3.2 本地子程序149
7.4 递归152
7.6 练习153
7.5 小结153
8.2 包的规范与创建154
8.1 包的概念154
第8章 包154
8.2.1 使用包的优势157
8.2.3 理解包体158
8.2.2 理解包规范158
8.3 包的调用165
8.4.1 包的重新编译169
8.4 包的重新编译和重载169
8.4.2 包的重载170
8.6 练习171
8.5 小结171
9.1 什么是异常172
第9章 异常处理172
9.2 PL/SQL预定义异常174
9.3 PL/SQL的异常处理结构176
9.3.2 异常的传播178
9.4.1 声明异常185
9.4 自定义异常185
9.4.2 使用编译指令EXCEPTION_INIT186
9.4.3 使用RAISE_APPLICATION_ERROR187
9.4.4 使用错误函数SQLCODE和SQLERRM189
9.5 小结192
9.6 练习193
10.2.1 声明游标194
10.2 显式游标194
第10章 游标194
10.1 什么是游标194
10.2.2 打开游标(OPEN CURSOR)196
10.2.3 提取游标(FETCH CURSOR)197
10.2.4 关闭游标(CLOSE CURSOR)198
10.2.5 显式游标的属性199
10.2.7 在包中使用游标202
10.2.6 在游标中使用子查询202
10.3 隐式游标203
10.4.1 基本循环(LOOP..END LOOP)205
10.4 游标提取循环205
10.4.3 FOR循环(CURSOR FOR LOOP)207
10.4.2 WHILE循环207
10.4.4 SELECT FOR UPDATE游标208
10.5 游标变量211
10.5.1 声明游标变量212
10.5.2 控制游标变量213
10.6 小结219
10.5.3 使用游标变量的限制219
10.7 练习220
11.1 触发器221
第11章 触发器221
11.2 DML触发器222
11.2.1 创建DML触发器223
11.2.2 访问行触发器中的列值224
11.3 使用DML触发器225
11.2.3 条件谓词225
11.3.1 维护数据完整性226
11.3.2 维护修改的历史日志230
11.4 系统触发器232
11.4.2 事件属性233
11.4.1 创建系统触发器233
11.4.3 系统触发器的例子234
11.5.1 替代触发器的创建237
11.5 替代触发器237
11.5.2 替代触发器的编写238
11.6.2 触发器和处理远程的例外240
11.6.1 在触发器体的错误条件和例外240
11.5.3 视图所包括的嵌套表上的列的触发器240
11.6 触发器的例外240
11.7 小结241
11.8 练习242
12.1 事务管理243
第12章 事务管理和锁定243
12.1.2 ROLLBACK(回滚)244
12.1.1 COMMIT(提交)244
12.1.3 SAVEPOINT(保存点)245
12.1.4 SET TRANSACTION247
12.2 锁定249
12.1.6 RELEASE249
12.1.5 分布式事务的管理249
12.2.1 表锁定250
12.2.3 显式的锁定251
12.2.2 锁定记录251
12.2.5 DBMS_LOCK包252
12.2.4 其他的锁定252
12.4 练习255
12.3 小结255
第13章 集合256
13.1 集合概述256
13.2 索引表257
13.2.2 向索引表中插入数据258
13.2.1 定义索引表258
13.2.3 引用索引表的值261
13.3.1 声明嵌套表263
13.3 嵌套表263
13.3.2 嵌套表的初始化和赋值264
13.3.3 数据库中的嵌套表267
13.4.1 定义变长数组270
13.4 变长数组270
13.4.2 初始化变长数组271
13.5.1 EXISTS方法272
13.5 使用集合方法272
13.4.3 数据库中的数组272
13.5.2 COUNT方法273
13.5.3 LIMIT方法274
13.5.6 EXTED方法275
13.5.5 PRIOR和NEXT方法275
13.5.4 FIRST和LAST方法275
13.5.7 DELETE和TRIM方法277
13.5.8 把方法用于集合参数280
13.6 集合的异常处理281
13.7 批联编283
13.7.1 使用FORALL语句284
13.7.2 使用BULK COLLECT289
13.9 练习293
13.8 小结293
14.1.1 对象(Object)294
14.1 面向对象的基本概念294
第14章 PL/SQL对象类型294
14.1.2 类(Class)295
14.1.3 继承(Inheritance)296
14.2.1 为什么使用对象297
14.2 对象类型297
14.1.4 多态性297
14.2.3 对象类型的组成298
14.2.2 对象类型的结构298
14.3.1 对象类型的定义299
14.3 定义对象类型299
14.3.2 SELF参数303
14.3.3 PL/SQL的继承304
14.3.4 更改和删除对象类型305
14.4.1 声明对象307
14.4 声明并初始化对象307
14.4.2 构造函数与初始化对象308
14.5.1 存取属性310
14.5 对象的使用310
14.5.2 调用构造函数312
14.5.3 调用方法313
14.6 按列存储对象314
14.7.1 创建对象表317
14.7 对象表317
14.7.3 检索对象表中的对象318
14.7.2 向对象表中添加对象318
14.7.4 更新对象表320
14.7.5 删除对象表的对象321
14.8.1 引用322
14.8 共享对象322
14.8.2 REF和DEREF函数324
14.8.3 前期类型定义325
14.9.1 MAP方法326
14.9 比较对象326
14.9.2 ORDER方法327
14.10 小结329
14.9.3 指导要点329
14.11 练习330
15.1 调试语法错误331
第15章 跟踪和调试331
15.2 调试逻辑错误335
15.2.1 逻辑错误例子336
15.2.2 逻辑错误解决337
15.3.1 在程序中插入调试用表339
15.3 使用工具调试程序339
15.3.2 DBMS-OUTPUT包345
15.4 程序的规划与代码编写348
15.4.2 编制代码349
15.4.1 程序结构的规划349
15.6 练习350
15.5 小结350
15.4.3 格式化代码350
16.1 什么是动态SQL352
第16章 本机动态SQL352
16.3 使用EXECUTE IMMEDIATE语句353
16.2 动态SQL的两种方法353
16.3.1 执行DDL354
16.3.3 绑定变量355
16.3.2 执行PL/SQL块355
16.4 使用OPEN-FOR、FETCH和CLOSE语句358
16.5 使用批动态SQL360
16.5.1 批EXECUTE IMMEDIATE361
16.5.2 批FETCH362
16.5.3 批FORALL363
16.6.2 使用重复的占位符365
16.6.1 改进性能365
16.6 动态SQL的技巧365
16.6.3 使用游标属性366
16.6.5 远程操作367
16.6.4 传递Null参数367
16.6.6 使用调用者特权368
16.8 练习369
16.7 小结369
16.6.7 避免死锁369
17.1 DBMS_OUTPUT包370
第17章 输入与输出370
17.1.2 启用DBMS_OUTPUT包371
17.1.1 使用DBMS_OUTPUT包371
17.1.4 将数据写到缓冲区372
17.1.3 关闭DBMS_OUTPUT包372
17.1.6 应用举例373
17.1.5 从缓冲区中读取数据373
17.2.1 安全性378
17.2 UTL_FILE包378
17.2.2 使用UTL_FILE包函数与文件I/O步骤379
17.2.4 文件的打开与关闭380
17.2.3 UTL_FILE引发的异常380
17.2.5 文件输出382
17.4 练习386
17.3 小结386
17.2.6 文件输入386
第18章 会话间通信387
18.1 DBMS_SESSION388
18.1.3 CLEAR_CONTEXT389
18.1.2 SET_CONTEXT389
18.1.1 SET_IDENTIFIER389
18.1.7 SET_NLS390
18.1.6 SET_SQL_TRACE390
18.1.4 CLEAR_IDENTIFIER390
18.1.5 SET_ROLE390
18.1.10 UNIQUE_SESSION_ID函数391
18.1.9 RESET_PACKAGE391
18.1.8 CLOSE_DATABASE_LINK391
18.1.14 FREE_UNUSED_USER_MEMORY392
18.1.13 SET_CLOSE_CACHED_OPEN_CURSORS392
18.1.11 IS_ROLE_ENABLED函数392
18.1.12 IS_SESSION_ALIVE函数392
18.1.15 LIST_CONTEXT394
18.1.16 SWITCH_CURRENT_CONSUMER_GROUP395
18.2 DBMS_ALERT396
18.2.3 报警使用机制397
18.2.2 常见错误397
18.2.1 包DBMS_ALERT中常量的定义397
18.2.5 DBMS_ALERT子程序的概述398
18.2.4 检查报警398
18.3 DBMS_PIPE401
18.3.1 公有管道和私有管道403
18.3.2 DBMS_PIPE子程序的概述405
18.5 练习422
18.4 小结422
19.1 高级队列简介424
第19章 高级队列424
19.1.4 队列监视428
19.1.3 传播特征428
19.1.1 异步消息通知428
19.1.2 监听功能428
19.2.1 为负载定义一个类型429
19.2 队列使用429
19.2.2 CREATE_QUEUE_TABLE430
19.2.4 DROP_QUEUE_TABLE432
19.2.3 ALTER_QUEUE_TABLE432
19.2.5 CREATE-QUEUE433
19.2.7 ALTER_QUEUE434
19.2.6 CREATE_NP_QUEUE434
19.2.11 ENQUEUE435
19.2.10 STOP_QUEUE435
19.2.8 DROP_QUEUE435
19.2.9 START_QUEUE435
19.2.12 DEQUEUE436
19.2.13 Message Properties438
19.2.15 AQ$_AGENT对象类型439
19.2.14 记录ENQUEUE_OPTIONS_T439
19.2.17 Dequeue Options Type440
19.2.16 AQ$_RECIPIENT_LIST_T对象类型440
19.3.1 GRANT_SYSTEM_PRIVILEGE441
19.3 其他AQ过程441
19.3.4 REVOKE_QUEUE_PRIVILEGE442
19.3.3 GRANT_QUEUE_PRIVILEGE442
19.3.2 REVOKE_SYSTEM_PRIVILEGE442
19.4 AQ中级知识443
19.4.4 AQ执行发布/订阅444
19.4.3 接收者列表444
19.4.1 订阅者列表和接收者列表444
19.4.2 订阅者列表444
19.4.5 AQ Recipient List Type(接收者列表数据类型)445
19.4.10 LISTEN过程446
19.4.9 AQ Registration Info List Type446
19.4.6 AQ Agent List Type(代理列表类型)446
19.4.7 AQ Subscriber List Type(订阅者列表类型)446
19.4.8 AQ Registration Info Type(AQ注册信息类型)446
19.4.11 REGISTER过程447
19.4.14 ALTER_SUBSCRIBER过程448
19.4.13 ADD_SUBSCRIBER过程448
19.4.12 UNREGISTER过程448
19.4.16 SCHEDULE_PROPAGATION过程449
19.4.15 REMOVE_SUBSCRIBER过程449
19.4.18 VERIFY_QUEUE_TYPES过程450
19.4.17 UNSCHEDULE_PROPAGATION过程450
19.5.1 创建队列表和队列451
19.5 AQ实例451
19.4.19 ALTER_PROPAGATION_SCHEDULE过程451
19.4.20 ENABLE_PROPAGATION_SCHEDULE过程451
19.4.21 DISABLE_PROPAGATION_SCHEDULE过程451
19.5.2 消息入队出队452
19.5.3 消息传播463
19.6 小结465
19.5.4 删除AQ对象465
19.7 练习466
20.1 如何运行作业467
第20章 数据库作业管理467
20.2.1 DBMS_JOB包469
20.2 管理作业队列469
20.2.2 作业环境(Job Environment)476
20.2.3 作业的导入导出(Import/Export)477
20.4 练习482
20.3 小结482
21.1.1 什么是大型对象483
21.1 大型对象类型概述483
第21章 大型对象483
21.1.2 大型对象数据类型484
21.1.3 可变宽度(Varying-Width)字符数据485
21.1.4 大型对象值和定位器486
21.1.5 创建包含大型对象的表488
21.2 Oracle 9i中大型对象的新特征490
21.3.1 DBMS_LOB包函数/过程介绍491
21.3 用PL/SQL的DBMS_上OB包491
21.3.3 DBMS_LOB包的数据类型,常数及异常493
21.3.2 DBMS_LOB包的大型对象定位器493
21.3.4 DBMS_LOB包的规则和限制494
21.4.2 打开BFILE498
21.4.1 创建目录对象498
21.4 使用外部大型对象BFILE498
21.4.4 函数FILEEXISTS499
21.4.3 函数FILEISOPEN499
21.4.6 获得文件信息500
21.4.5 关闭文件的过程500
21.4.7 读文件操作501
21.4.8 比较两个文件内容502
21.4.9 INSTR函数503
21.5 使用外部大型对象BFILE的范例504
21.4.10 SUBSTR函数504
21.6 使用内部大型对象506
21.6.2 COMPARE函数507
21.6.1 APPEMD过程507
21.6.3 COPY过程508
21.6.5 ERASE过程510
21.6.4 EMPTY_BLOB和EMPTY_CLOB函数510
21.6.7 INSTR函数511
21.6.6 GETLENGTH函数511
21.6.8 READ过程512
21.6.9 SUBSTR函数513
21.6.10 TRIM过程515
21.6 11 WRITE过程515
21.6.12 WRITEAPPEND过程516
21.7 使用内部大型对象的范例517
21.7.1 向内部LOB拷贝数据518
21.7.3 分析内部LOB内容520
21.7.4 编辑内部LOB对象522
21.8 临时大型对象523
21.8.1 临时大型对象概述523
21.8.2 临时大型对象的使用524
21.9.1 LONG与LOB数据类型的比较526
21.9 LONG与LOB数据类型526
21.9.2 LONG与LOB数据类型的转换527
21.10 小结528
21.11 练习528
第22章 开发Web应用程序529
22.1 PL/SQL Web应用程序概念529
21.7.2 向内部LOB中添加数据529
22.1.1 使用PL/SQL存储过程和函数530
22.1.2 PL/SQL Server Pages530
22.2.1 安装Oracle HTTP Server531
22.2 设置和检验PL/SQL服务器页531
22.2.2 创建一个PSP文件531
22.1.3 为XML启用PL/SQL Web应用程序531
22.2.3 将PSP文件导入到数据库532
22.2.4 设置Oracle HTTP Server532
22.2.5 从浏览器中调用PSP533
22.3.1 从HTML表单中传递列表框或微调框参数534
22.3.2 从HTML表单中传递单选按钮或复选框参数534
22.3 PL/SQL Web应用程序的参数传递534
22.3.3 从HTML表单传递输入域参数535
22.3.5 提交一张完整的HTML表单537
22.3.6 从HTML表单中处理丢失的输入537
22.3.4 从HTML表单中传递隐藏参数的值537
22.4 在PL/SQL存储过程中执行网络操作538
22.4.1 从PL/SQL中发送邮件538
22.3.7 在网页之间维护状态信息538
22.4.3 在PL/SQL中操作TCP/IP连接539
22.4.4 从PL/SQL中检索一个HTTP URL的内容539
22.4.2 从PL/SQL中得到一个主机名或地址539
22.4.5 操作表格、图像、Cookies和CGI变量542
22.5 PL/SQL Server Pages542
22.5.1 选择一个软件配置543
22.5.2 为PL/SQL服务器页编写代码和内容543
22.5.3 把PL/SQL服务器页装载到数据库存储过程549
22.6 PL/SQL Server Pages实例550
22.6.1 一次性显示表的内容551
22.6.2 使用循环打印表的内容551
22.6.3 用户选择552
22.6.4 调用PL/SQL服务器页的HTML表单554
22.6.5 在PSP文件中包含JavaScript554
22.6.6 调试PL/SQL Server Pages556
22.6.7 将PSP应用程序加入产品557
22.8 练习558
第23章 调整PL/SQL应用程序559
23.1 PL/SQL性能问题的原因559
23.2 识别PL/SQL性能问题563
23.2.1 剖析API:DBMS_PROFILER包563
23.2.2 跟踪API:DBMS_TRACE包564
23.3 性能调整的PL/SQL特征564
23.3.1 通过本机动态SQL改进PL/SQL性能565
23.3.2 通过批联编提高PL/SQL性能565
23.3.4 使用RETURNING子句提高PL/SQL性能566
23.3.5 使用外部程序提高PL/SQL性能566
23.3.3 使用NOCOPY编译器提示来提高PL/SQL性能566
23.3.6 使用对象类型和集合来提高PL/SQL性能567
23.3.7 编译PL/SQL代码以便于本地执行567
23.4 小结569
附录一 PL/SQL保留字570
附录二 部分练习答案572
附录三 部分表结构584
附录四 SQL*Plus的使用589
F4.1 启动SQL*Plus589
F4.2 输入和执行命令590
F4.3 编辑SQL命令593
F4.4 创建和修改命令文件596
F4.5 环境变量的设置和保存598
F4.6 编写交互命令599
F4.7 格式化查询结果602
热门推荐
- 33453.html
- 1071671.html
- 1400757.html
- 1867948.html
- 1068108.html
- 2513822.html
- 3473210.html
- 399365.html
- 292474.html
- 1655941.html
- http://www.ickdjs.cc/book_2825972.html
- http://www.ickdjs.cc/book_3119684.html
- http://www.ickdjs.cc/book_66384.html
- http://www.ickdjs.cc/book_2985557.html
- http://www.ickdjs.cc/book_835443.html
- http://www.ickdjs.cc/book_72813.html
- http://www.ickdjs.cc/book_3028770.html
- http://www.ickdjs.cc/book_699614.html
- http://www.ickdjs.cc/book_3803135.html
- http://www.ickdjs.cc/book_1501105.html