oracle clob 查询group by 分组 检索项目中有clob类型 如何处理

502 Bad Gateway
502 Bad Gateway
nginx/1.2.7在 Oracle 和 PHP 中使用 LOB
作者:Harry Fuecks
是否达到 4,000 字节的极限? 我们先来了解一下 LOB......
本文相关下载:
使用 VARCHAR2 这样的 Oracle 类型是完全可以的,但如果您要一次性存储的数据量超过它的 4,000 字节的极限,情况将会如何? 要完成此任务,您需要 Oracle 的某个 Long 对象 (LOB) 类型,为此您应了解如何使用 PHP API 来处理 LOB。 这对于不熟悉它的人来说是很困难的。
在这篇&Oracle+PHP 指南&操作文档中,您将了解可用的 LOB 类型以及与它们相关的问题,然后将探讨 PHP 中常见 LOB 操作示例。
Oracle 提供了以下 LOB 类型:
BLOB,用于存储二进制数据
CLOB,用于使用数据库字符集编码存储字符数据
NCLOB,用于使用国家字符集存储 Unicode 字符数据。 注意,您将在本文中使用的 PHP
扩展当前不支持 NCLOB。
BFILE,用于引用存在于操作系统的文件系统中的外部文件
LOB 的更深一层的子类别是临时 LOB(可以为 BLOB、CLOB 或 NCLOB),它在被释放之前一直存储在临时表空间中。
注意,较旧版本的 Oracle 分别为字符和二进制数据提供了 LONG 和 LONG RAW 类型。 在 Oracle9i 中,LOB 取代了这两个类型。
LOB 存储。 对于 BLOB、CLOB 和 NCLOB 类型,Oracle 数据库 10g 能够在单个值中最多存储 128TB 数据,具体情况取决于为 LOB 定义的数据库块大小和&块&设置。
LOB 本身由两个元素构成: LOB 内容和 LOB 定位器(它是指向 LOB 内容的&指针&)。 这种划分对于 Oracle 高效地存储和管理 LOB 是必需的,它反映在用于对 LOB 执行
SELECT 操作的 PHP API 中(如下所示)。
对于内部 LOB 类型(即 BFILE 以外的类型),如果 LOB 小于 4KB,则 Oracle 将 LOB 的内容&整齐&地存储在表中(与行的剩余部分存储在一起)。 默认情况下,大于 4KB 的 LOB&不规则&地存储在表的表空间中。 该方法可以快速检索到小型 LOB,而对于大型 LOB,访问时间将比较长,但扫描表时的总体性能保持不变。
适用于 LOB 存储和访问并可以提高性能的可选方法还有很多(如内存缓存和缓冲),具体使用哪一个应根据应用程序的具体情况而定。 有关进一步的信息,请参阅 Oracle 文档中的
有关 LOB 使用方面的限制。 LOB 类型在使用方面存在一些限制,最重要的限制体现在它们在 SQL 语句中的使用。 您不能在以下任意查询中使用 LOB 类型。
SELECT DISTINCT &lob_type&
ORDER BY &lob_type&
GROUP BY &lob_col&
将 LOB 类型列用于表连接、
INTERSECTION 和
MINUS 语句也是非法的。
在 LOB 使用的其他方面存在更多限制,例如,您不能将 LOB 用作主键列。 有关详细信息,请再次参阅
数据库的默认字符集由参数 NLS_CHARACTERSET 定义,应使用该字符集对位于 CLOB 中的文本进行编码。 使用以下 SQL 确定数据库字符集编码:
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'
鉴于 PHP 中缺乏对 NCLOB 的支持,因此您可能需要考虑将 Unicode 编码(如 UTF-8)用作数据库字符,这可以通过以下语句实现(假设您有足够的权限):
ALTER DATABASE CHARACTER SET UTF8
注意: 在您不了解影响的情况下不要尝试该操作,尤其是如果现有数据或应用程序代码使用其他字符集。 有关更多信息,请参阅
此处将主要介绍 PHP 的 OCI8 扩展。 还有一点值得注意的是,Oracle 提供了 DBMS_LOB 程序包,其中包含用于在 PL/SQL 中使用 LOB 的并行过程和函数。
PHP OCI8 扩展在全局 PHP 命名空间中注册一个称作&OCI-Lob&的 PHP 类。 当您执行
SELECT 语句时(例如,其中的某一列的类型为 LOB),PHP 将把它自动绑定到 OCI-Lob 对象实例。 引用 OCI-Lob 对象后,可以调用类似
这样的方法来访问或修改 LOB 的内容。
可用的 OCI-Lob 方法将取决于 PHP 的版本,PHP5 特别提供了
PHP 手册对提供可用 OCI-Lob 方法的 PHP 版本号介绍得不够明确,因此,如果您存在疑问,可以使用以下脚本进行确认。
foreach (get_class_methods('OCI-Lob') as $method ) {
print &OCI-Lob::$method()\n&;
在我的系统上运行 PHP 5.0.5 时,我获得了以下方法列表:
OCI-Lob::load()
OCI-Lob::tell()
OCI-Lob::truncate()
OCI-Lob::erase()
OCI-Lob::flush()
OCI-Lob::setbuffering()
OCI-Lob::getbuffering()
OCI-Lob::rewind()
OCI-Lob::read()
OCI-Lob::eof()
OCI-Lob::seek()
OCI-Lob::write()
OCI-Lob::append()
OCI-Lob::size()
OCI-Lob::writetofile()
OCI-Lob::writetemporary()
OCI-Lob::close()
OCI-Lob::save()
OCI-Lob::savefile()
OCI-Lob::free()
实际上,PHP 4.x OCI8 扩展只支持读取或写入完整的 LOB,这是 Web 应用程序中最常见的用法。 PHP5 对此进行了扩展,从而可以读取和写入 LOB 的&块&,同时还使用
方法支持 LOB 缓冲。 PHP5 还提供了独立函数
此处的示例将使用新的 PHP5 OCI 函数名(例如,用
)。 这些示例使用以下序列和表:
CREATE SEQUENCE mylobs_id_seq
NOMINVALUE
NOMAXVALUE
INCREMENT BY 1;
CREATE TABLE mylobs (
id NUMBER PRIMARY KEY,
mylob CLOB
注意,此处的大多数示例都使用 CLOB,但同一逻辑几乎完全可以应用于 BLOB。
INSERT 插入一个内部 LOB,首先需要使用相应的 Oracle
EMPTY_BLOB 或
EMPTY_CLOB 函数来初始化 LOB,您无法更新一个包含 NULL 值的 LOB。
初始化后,请将该列绑定到 PHP OCI-Lob 对象,然后通过该对象的
save() 方法更新 LOB 内容。
以下脚本提供了一个示例,用于从
INSERT 查询中返回 LOB 类型:
// connect to DB etc...
$sql = &INSERT INTO
mylobs_id_seq.NEXTVAL,
--Initialize as an empty CLOB
EMPTY_CLOB()
--Return the LOB locator
mylob INTO :mylob_loc&;
$stmt = oci_parse($conn, $sql);
// Creates an &empty& OCI-Lob object to bind to the locator
$myLOB = oci_new_descriptor($conn, OCI_D_LOB);
// Bind the returned Oracle LOB locator to the PHP LOB object
oci_bind_by_name($stmt, &:mylob_loc&, $myLOB, -1, OCI_B_CLOB);
// Execute the statement using , OCI_DEFAULT - as a transaction
oci_execute($stmt, OCI_DEFAULT)
or die (&Unable to execute query\n&);
// Now save a value to the LOB
if ( !$myLOB-&save('INSERT: '.date('H:i:s',time())) ) {
// On error, rollback the transaction
oci_rollback($conn);
// On success, commit the transaction
oci_commit($conn);
// Free resources
oci_free_statement($stmt);
$myLOB-&free();
// disconnect from DB etc.
注意该示例如何使用事务,它使用
OCI_DEFAULT 常量指示
。 这一点很重要,因为我在
INSERT 中分两个阶段执行操作 - 首先创建行,然后更新 LOB。
注意,如果我使用了 BLOB 类型,则唯一需要更改(假设有一个 BLOB 列)的就是
oci_bind_by_name($stmt, &:mylob_loc&, $myLOB, -1, OCI_B_BLOB);
或者,您也可以直接绑定字符串而不必指定 LOB 类型;
$sql = &INSERT INTO
mylobs_id_seq.NEXTVAL,
$stmt = oci_parse($conn, $sql);
$string = 'INSERT: '.date('H:i:s',time());
oci_bind_by_name($stmt, ':string', $string);
oci_execute($stmt)
or die (&Unable to execute query\n&);
该方法极大地简化了代码,并且在要写入 LOB 的数据相对较小的情况下比较合适。 相反,如果要将大型文件的内容传送到 LOB 中,则可以遍历该文件的内容,方法是对 PHP LOB 对象调用
以写入较小的块,而不是在单个实例中将整个文件保存在内存中。
SELECT 查询包含一个 LOB 列,PHP 将自动把该列绑定到 OCI-Lob 对象。例如:
$sql = &SELECT
$stmt = oci_parse($conn, $sql);
oci_execute($stmt)
or die (&Unable to execute query\n&);
while ( $row = oci_fetch_assoc($stmt) ) {
print &ID: {$row['ID']}, &;
// Call the load() method to get the contents of the LOB
print $row['MYLOB']-&load().&\n&;
可以进一步简化以上代码,方法是使用
OCI_RETURN_LOBS 常量(与
oci_fetch_array() 结合使用)并指示它用 LOB 对象的值替换这些对象:
while ( $row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_LOBS) ) {
print &ID: {$row['ID']}, {$row['MYLOB']}\n&;
UPDATE 更新 LOB,也可以在 SQL 中使用&
RETURNING&命令(与上面的
INSERT 示例一样),但一个更简单的方法是使用
SELECT ... FOR UPDATE:
$sql = &SELECT
FOR UPDATE /* locks the row */
$stmt = oci_parse($conn, $sql);
// Execute the statement using OCI_DEFAULT (begin a transaction)
oci_execute($stmt, OCI_DEFAULT)
or die (&Unable to execute query\n&);
// Fetch the SELECTed row
if ( FALSE === ($row = oci_fetch_assoc($stmt) ) ) {
oci_rollback($conn);
die (&Unable to fetch row\n&);
// Discard the existing LOB contents
if ( !$row['MYLOB']-&truncate() ) {
oci_rollback($conn);
die (&Failed to truncate LOB\n&);
// Now save a value to the LOB
if ( !$row['MYLOB']-&save('UPDATE: '.date('H:i:s',time()) ) ) {
// On error, rollback the transaction
oci_rollback($conn);
// On success, commit the transaction
oci_commit($conn);
// Free resources
oci_free_statement($stmt);
$row['MYLOB']-&free();
INSERT 一样,我需要使用事务执行
UPDATE。 一个重要的额外步骤是调用
save() 更新 LOB 时,它将替换 LOB 的内容,范围从开头一直到新数据的长度。 这意味着较旧的内容(如果它比新内容长)可能仍保留在 LOB 中。
对于 PHP 4.x(其中未提供
truncate()),以下替换解决方案使用 Oracle 的
EMPTY_CLOB() 函数删除 LOB 中的任何现有内容,然后将新数据保存到其中。
$sql = &UPDATE
mylob = EMPTY_CLOB()
mylob INTO :mylob
$stmt = OCIParse($conn, $sql);
$mylob = OCINewDescriptor($conn,OCI_D_LOB);
OCIBindByName($stmt,':mylob',$mylob, -1, OCI_B_CLOB);
// Execute the statement using OCI_DEFAULT (begin a transaction)
OCIExecute($stmt, OCI_DEFAULT)
or die (&Unable to execute query\n&);
if ( !$mylob-&save( 'UPDATE: '.date('H:i:s',time()) ) ) {
OCIRollback($conn);
die(&Unable to update lob\n&);
OCICommit($conn);
$mylob-&free();
OCIFreeStatement($stmt);
使用 BFILE 类型时,
UPDATE 将该文件在数据库服务器(可能与 Web 服务器不在同一计算机上)的文件系统中的位置告知 Oracle,而不是传递文件内容。 使用
SELECT 语句,您可以通过 Oracle 读取 BFILE 的内容(如果您愿意),也可以调用
DBMS_LOB 程序包中的函数和过程来获取有关文件的信息。
BFILE 的主要优点是能够直接从文件系统中访问原始文件,同时仍然可以使用 SQL 定位文件。 例如,这意味着 Web 服务器可以直接提供映射,而我可以跟踪包含 BFILES 的表与&users&表(指示哪些用户上载了文件)之间的关系。
在示例中,我首先需要更新上面使用的表模式;
ALTER TABLE mylobs ADD( mybfile BFILE )
然后,我需要使用 Oracle 注册一个目录别名(这需要管理权限)并授予对该目录的读取权限:
CREATE DIRECTORY IMAGES_DIR AS '/home/harryf/public_html/images'
GRANT READ ON DIRECTORY IMAGES_DIR TO scott
我现在可以使用
INSERT 插入一些如下所示的 BFILE 名称:
// Build an INSERT for the BFILE names
$sql = &INSERT INTO
mylobs_id_seq.NEXTVAL,
Pass the file name using the Oracle directory reference
I created called IMAGES_DIR
BFILENAME('IMAGES_DIR',:filename)
$stmt = oci_parse($conn, $sql);
// Open the directory
$dir = '/home/harryf/public_html/images';
$dh = opendir($dir)
or die(&Unable to open $dir&);
// Loop through the contents of the directory
while (false !== ( $entry = readdir($dh) ) ) {
// Match only files with the extension .jpg, .gif or .png
if ( is_file($dir.'/'.$entry) && preg_match('/\.(jpg|gif|png)$/',$entry) ) {
// Bind the filename of the statement
oci_bind_by_name($stmt, &:filename&, $entry);
// Execute the statement
if ( oci_execute($stmt) ) {
print &$entry added\n&;
如果需要,我可以通过 Oracle 读取 BFILE 的内容,方法与我在上面选择 CLOB 时所采用的方法相同。 或者,如果我需要获得文件名,则可以直接从文件系统中访问它们,我可以调用如下所示的
DBMS_LOB.FILEGETNAME 过程:
$sql = &SELECT
-- Select only BFILES which are not null
mybfile IS NOT NULL;
$stmt1 = oci_parse($conn, $sql);
oci_execute($stmt1)
or die (&Unable to execute query\n&);
$sql = &DECLARE
locator BFILE;
diralias VARCHAR2(30);
filename VARCHAR2(30);
mybfile INTO locator
-- Get the filename from the BFILE
DBMS_LOB.FILEGETNAME(locator, diralias, filename);
-- Assign OUT params to bind parameters
:diralias:=
:filename:=
$stmt2 = oci_parse($conn, $sql);
while ( $row = oci_fetch_assoc ($stmt1) ) {
oci_bind_by_name($stmt2, &:id&, $row['ID']);
oci_bind_by_name ($stmt2, &:diralias&, $diralias,30);
oci_bind_by_name ($stmt2, &:filename&, $filename,30);
oci_execute($stmt2);
print &{$row['ID']}: $diralias/$filename\n&;
此外,您可以使用
DBMS_LOB.FILEEXISTS 函数找出操作系统已经删除但在数据库中仍然引用的文件。
本方法文档向您介绍了 Oracle 数据库 10g 提供的不同类型的 LOB,希望您现在已经了解了它们在将大型数据实体高效存储在数据库中这一方面所起到的作用。 您还学习了如何使用 PHP 的 OCI8 API 处理 LOB,其中涵盖了在使用 Oracle 和 PHP 进行开发时将遇到的常见使用情形。
Harry Fuecks [
] 于 1999 年接触 PHP,此后作为 PHP 开发人员和撰稿人而名声鹊起。他通过
开发人员网络发布了大量初级和中级 PHP 文章,著有
客户与活动
服务与商店
电话: 800-810-8-6698清华大学出版社 - 图书详细资料
&&&&Oracle完全学习手册
计算机考试类图书
机械材料汽车能源
建筑土木水利
环境与给排水
生物与医学
电工基础与电气工程
社会职业培训
计算机基础
计算机组成与原理
算法与程序设计
计算机技术及应用
计算机网络
图形图像与多媒体
计算机辅助设计
计算机--其他
计算机考试类图书
非英语专业本科教材
非英语专业研究生教材
专升本教材
英语专业教材
选修课系列教材
专门用途英语教材
学术类图书
考试类用书
娱乐休闲英语
英语学习方法
非英语语种图书
外语--其他
高职高专--公共基础课
高职高专--人文社科类
高职高专--计算机类
高职高专--电子信息类
高职高专--机电类
高职高专--工科类
高职高专--经济管理类
高职高专--服务类
基础教育--英语
基础教育--信息技术
中职教育--计算机类
中职教育--公共课
中职教育--经济管理类
中职教育--电子信息类
中职教育--机电类
中职教育--服务类
Oracle完全学习手册
作者:郭郑州、陈军红
图书详细信息:
定价:79.5元
装帧:平装
印刷日期:
图书简介: Oracle数据库作为世界范围内性能最优异的数据库系统之一,它在国内数据库市场的占有率远远超过其对手,始终处于数据库领域的领先地位。本书以Oracle&11g&for&Windows&XP为平台,由浅入深地介绍Oracle&Database&11g系统的使用方法和基本管理。主要包括:关系数据库设计、Oracle数据库的基本体系结构、存储管理、管理控制文件和日志文件、SQL语言基础、使用SQL*Plus、PL/SQL程序设计、存储过程、触发器和程序包、表、模式对象管理、安全管理以及基本的备份与恢复等,最后以4个应用实例分别结合Java&Swing、JSP、ASP.NET和PHP技术来讲述Oracle的实际应用。本书适合大专院校在校学生、网站开发人员、Java学习和开发人员以及编程爱好者学习和参考。
数据库在如今的各大行业中都有着举足轻重的地位,而Oracle数据库则是数据库系统中的佼佼者,Oracle公司是世界领先的信息管理软件开发商之一,因其复杂的关系数据库产品而闻名,它占有最大的市场份额,其产品被广泛用于各个行业,满足一系列的存储需求。
日,Oracle公司宣布推出Oracle最新版本:Oracle Database 11g,它在Oracle Database 10g的基础上新增加了400多项特性,使Oracle数据库变得更可靠、性能更好、更容易使用和更安全。
1.本书内容
本书针对Oracle Database 11g编写,全面地介绍Oracle数据库的管理与开发,向读者全面展示Oracle数据库的使用,还以大量的实例来介绍Oracle数据库在实际应用程序中的使用,帮助读者从实际应用的角度学习Oracle数据库,以免初学者在学完理论知识后感到迷茫,不知道怎么去应用学到的知识。本书共分为5篇,分别是Oracle基础篇、操作Oracle篇、Oracle进阶篇、备份与恢复篇和综合应用篇。各篇的主要内容如下。
第1篇:Oracle基础篇(第1~6章)。本篇从数据库的关系理论开始介绍,讲解Oracle Database 11g在Windows环境下的安装,Oracle数据库的体系结构、如何使用SQL*Plus工具,以及如何管理表、表空间、控制文件与日志文件等。
第2篇:操作Oracle篇(第7~12章)。本篇着重介绍Oracle中的数据处理,主要包括:DML语句、事务、子查询、高级查询和PL/SQL编程。PL/SQL编程是本书的重点之一,主要内容有存储过程、函数、触发器和程序包。
第3篇:Oracle进阶篇(第13~18章)。本篇对Oracle中的数据库安全管理进行详细介绍,并且介绍Oracle中的其他常用模式对象,例如索引、序列和临时表等。为了满足读者更深入地学习的需求,本篇也将对数据库对象类型、大对象和SQL语句优化等进行比较具体的介绍。
第4篇:备份与恢复篇(第19~22章)。本篇主要介绍Oracle中的数据备份与恢复。主要包括:用户管理的备份与恢复、使用RMAN工具实现数据库的备份与恢复、加载与传输数据和Oracle中的闪回技术。
第5篇:综合应用篇(第23~26章)。本篇介绍了4个应用实例,包括酒店管理系统、BBS论坛、日志管理模块和留言本。其中,酒店管理系统结合了Java Swing技术,BBS论坛结合了JSP技术,日志管理模块结合了ASP.NET技术,留言本结合了PHP技术。这4个实例分别使用了不同的技术,目的是为了满足读者的各种编程需求。
2.本书特色
本书中采用大量的实例进行讲解,力求通过实际操作使读者更容易地掌握Oracle Database 11g的管理操作。本书难度适中,内容由浅入深,实用性强,覆盖面广,条理清晰。
? 知识点全
本书紧紧围绕Oracle Database 11g的实际应用、管理与开发展开讲解,具有很强的逻辑性和系统性。
? 基于理论,注重实践
在讲述过程中,不仅仅只介绍理论知识,而且在合适位置安排具有代表性、操作性强的综合应用,将理论应用到实践当中,加强读者的实际应用能力,巩固Oracle的理论知识。
? 快速掌握
注重技术原理和实际应用的高度融合,通过循序渐进的内容组织和大量来自工作现场的应用案例,帮助读者快速掌握和应用Oracle Database 11g数据库技术。
? 案例实用
在本书最后,分别结合Java Swing、JSP、PHP和ASP.NET这4门技术开发了相应的综合实例,而且有些案例能够直接在项目中使用,避免读者进行二次开发。
? 随书光盘
本书为实例配备了视频教学文件,读者可以通过视频文件更加直观地学习Oracle Database 11g的使用知识。
? 网站技术支持
读者在学习或者工作的过程中,如果遇到实际问题,可以直接登录与我们取得联系,作者会在第一时间内给予帮助。
3.读者对象
本书具有知识全面、实例精彩、指导性强的特点,力求以全面的知识及丰富的实例来指导读者透彻地学习Oracle Database 11g各方面的知识。本书可以作为Oracle Database 11g的入门书籍,也可以帮助中级读者提高技能,对高级读者也有一定的启发意义。
本书适合以下人员阅读学习。
? 数据库管理人员。
? 数据库开发人员。
? 系统维护人员。
? 数据库初学者。
? 各大中专院校的在校学生和相关授课老师。
除了封面署名人员之外,参与本书编写的还有于永军、张秋香、李乃文、张仕禹、夏小军、赵振江、李振山、李文才、吴越胜、李海庆、何永国、李海峰、陶丽、吴俊海、安征、张巍屹、崔群法、王咏梅、康显丽、辛爱军、牛小平、贾栓稳、王立新、苏静、赵元庆、郭磊、徐铭、李大庆、王蕾、张勇、郝安林、郭新志、牛丽平、唐守国等。在编写过程中难免会有疏漏之处,欢迎读者批评指正,帮助我们改正提高。
Oracle基础篇
Oracle关系数据库 1
关系数据模型 1
关系术语 2
关系数据模型的特点 3
关系数据库 4
关系操作 4
关系的完整性 4
关系数据库规范化理论 6
函数依赖 6
范式理论 7
数据库设计 8
实体-关系模型 9
E-R图的绘制 9
将E-R数据模型转化为关系模式 10
Oracle应用系统结构 11
单磁盘独立主机结构 11
多磁盘独立主机结构 11
多数据库独立主机结构 12
Oracle客户/服务器系统结构 12
Oracle浏览器/服务器系统结构 13
Oracle分布式数据库系统结构 14
安装Oracle 11g 15
在Windows环境下的安装过程 15
查看Oracle系统 21
创建数据库 21
Oracle默认用户 26
使用OEM 27
Oracle体系结构概述 31
物理存储结构 31
数据文件 31
控制文件 33
重做日志文件 34
其他文件 35
逻辑存储结构 35
Oracle进程结构 38
进程结构概述 39
DBWn进程 39
LGWR进程 41
CKPT进程 41
SMON进程 42
PMON进程 42
ARCn进程 42
RECO进程 43
LCKn进程 43
Dnnn进程 43
SNPn进程 44
Oracle内存结构 44
内存结构概述 44
系统全局区 45
程序全局区 46
数据字典 47
Oracle数据字典介绍 47
Oracle常用数据字典 48
使用SQL*Plus 51
SQL*Plus的主要功能 51
SQL*Plus连接数据库 51
启动SQL*Plus 51
从命令行启动SQL*Plus 53
断开数据库连接 54
查看表结构 54
编辑SQL语句 55
保存、检索并运行文件 56
使用SQL*Plus格式化查询结果 58
格式化列 58
设置页面大小 59
设置行大小 60
清除列格式 60
使用变量 61
临时变量 61
已定义变量 63
创建简单报表 65
在脚本中使用临时变量 65
在脚本中使用已定义变量 66
向脚本中的变量传递值 66
添加页眉和页脚 67
计算小计 68
管理基本表空间 70
表空间管理类型 70
创建基本表空间 72
修改表空间 79
临时表空间 85
创建临时表空间 85
修改临时表空间 86
临时表空间组 87
大文件表空间 88
非标准数据块表空间 90
撤销表空间 91
管理撤销表空间的方式 91
创建和管理撤销表空间 92
管理控制文件与日志文件 97
管理控制文件 97
控制文件的概述 97
创建控制文件 98
管理与维护控制文件 101
查询控制文件信息 104
管理日志文件 105
日志文件的概述 105
创建日志文件组及其成员 106
管理日志文件组及其成员 107
查看日志文件信息 110
管理归档日志 111
归档日志的概述 111
设置数据库模式 112
设置归档目标 113
设置归档进程的跟踪级别 114
查看归档日志信息 115
创建表 117
创建表的策略 117
使用SQL语句创建表 118
指定表空间 123
指定存储参数 124
设置数据块管理参数 125
指定重做日志 127
指定缓存 128
通过OEM创建表 129
修改表 131
增加和删除列 131
更新列 133
重命名表 135
改变表的存储表空间和存储
删除表定义 137
完整性约束 137
约束的分类和定义 138
NOT NULL约束 138
PRIMARY KEY约束 140
UNIQUE约束 142
CHECK约束 143
FOREIGN KEY约束 144
禁止和激活约束 147
验证约束 149
延迟约束 150
查询约束信息 151
分析表 152
操作Oracle篇
SQL基础 157
SQL语言概述 157
SQL语言特点 157
SQL语言分类 158
SQL语句的编写规则 158
使用SELECT检索数据 159
使用FROM子句指定表 159
使用SELECT(必要元素)
指定列 160
使用WHERE子句指定行 160
使用ORDER BY子句
对行进行排序 164
使用GROUP BY子句
对行进行分组 166
使用HAVING子句过滤行组 167
组合使用WHERE、GROUP BY和HAVING子句 167
使用DISTINCT来检索
唯一的表列值 167
使用算术运算符 168
使用DML语句 169
使用INSERT语句插入表数据 169
使用UPDATE语句更新表数据 170
使用DELETE语句删除表数据 170
使用MERGE语句修改表数据 171
表的连接查询 173
简单连接 173
内连接 174
外连接 175
自连接 176
数据库事务 177
事务的提交和回滚 177
事务的开始与结束 178
设置保存点 179
事务的ACID特性 180
并发事务 180
事务锁 182
事务隔离级别 183
使用简单函数 185
使用单行函数 185
字符函数 185
数字函数 188
转换函数 190
正则表达式函数 192
使用聚合函数 195
日期时间处理函数 197
使用TO_CHAR()和TO_DATE()
转换时间值 198
使用时间值函数 199
子查询 202
子查询的类型 202
编写单行子查询 202
在WHERE子句中使用子查询 203
使用其他单行操作符 203
在HAVING子句中使用子查询 204
在FROM子句中使用子查询 205
常见查询错误 206
编写多行子查询 207
编写多列子查询 209
编写关联子查询 210
使用关联子查询 210
在关联子查询中使用EXISTS
和NOT EXISTS 211
编写嵌套子查询 212
编写包含子查询的UPDATE
和DELETE语句 213
高级查询 215
使用集合操作符 215
使用TRANSLATE()函数 218
使用DECODE()函数 219
使用CASE表达式 220
使用简单CASE表达式 220
使用搜索CASE表达式 221
层次化查询 222
示例数据 222
使用CONNECT BY和START WITH子句 223
使用伪列LEVEL 224
格式化层次化查询的结果 225
从非根节点开始遍历 226
在START WITH子句
中使用子查询 226
从下向上遍历树 227
从层次化查询中删除节点
和分支 227
在层次化查询中加入其他条件 228
使用扩展的GROUP BY子句 229
使用ROLLUP子句 229
使用CUBE子句 230
使用GROUPING()函数 231
使用GROUPING SETS子句 233
使用GROUPING_ID()函数 233
使用GROUP_ID()函数 236
PL/SQL基础 238
PL/SQL概述 238
PL/SQL语言特点 238
PL/SQL代码编写规则 238
PL/SQL结构 239
PL/SQL程序块 239
变量和类型 240
运算符与表达式 242
PL/SQL的注释 242
编写控制结构 243
条件分支语句 243
循环语句 245
GOTO和NULL 248
复合变量 249
%TYPE变量 249
%ROWTYPE变量 250
PL/SQL记录 251
PL/SQL集合 252
索引表 252
嵌套表 254
变长数组 256
PL/SQL记录表 258
集合方法 259
游标基本操作 263
游标属性 264
参数化游标和隐式游标 266
使用游标更新或删除数据 267
游标FOR循环 268
使用游标变量 269
异常处理 271
预定义异常 271
用户自定义异常 274
异常函数 275
PL/SQL高级应用 277
存储过程 277
过程的基本操作 277
过程的参数传递 279
过程的参数模式 280
参数的默认值 282
函数的基本操作 283
建立带参函数 285
程序包 287
包的基本操作 288
系统预定义包 289
私有过程和函数 290
使用包重载 291
使用包构造过程 293
触发器 296
触发器的类型 296
触发器的基本操作 297
语句触发器 298
触发器的新值和旧值 300
行触发器 301
INSTEAD OF触发器 304
系统事件触发器 305
Oracle进阶篇
用户权限与安全 309
管理用户 309
创建用户 309
修改用户 312
删除用户 314
查看用户会话信息 314
用户配置文件 316
资源限制参数 316
口令限制参数 317
创建用户配置文件 318
管理配置文件 320
通过OEM管理配置文件 321
权限的概述 323
系统权限 325
对象权限 328
查看权限信息 331
角色的概述 333
系统预定义角色 333
创建角色 335
修改用户的默认角色 336
禁用和启用角色 337
修改角色 338
删除角色 338
查看角色信息 339
通过OEM管理角色 340
数据库审计 343
审计概述 343
审计及其作用 343
审计类型 344
启动数据库审计 345
语句审计 346
语句审计概述 346
使用语句审计 348
权限审计 349
对象审计 350
对象审计概述 350
使用对象审计 351
审计信息查询 353
细粒度的审计 355
其他模式对象 358
索引类型 358
指定索引选项 361
创建B树索引 363
创建位图索引 364
创建反向键索引 364
创建基于函数的索引 365
管理索引 365
索引组织表 368
索引组织表与标准表 368
溢出存储 369
临时表 370
临时表的特点 370
临时表的类别 371
创建与使用临时表 371
外部表 373
创建外部表 373
处理外部表错误 375
分区表与分区索引 379
分区概述 379
创建分区表 380
建立分区表索引 384
管理分区表 386
簇与簇表 389
创建簇和簇表 389
创建簇索引 391
管理簇 391
创建视图 393
可更新的视图 396
删除视图 399
创建序列 399
修改序列 402
删除序列 402
同义词 403
数据库对象类型 404
对象类型简介 404
创建对象类型 404
创建简单对象类型 405
创建带有函数的对象类型 406
获取对象类型信息 408
在数据库表中使用对象类型 409
列对象 409
对象表 411
对象标识符和对象引用 414
比较对象值 417
在PL/SQL中使用对象类型 419
大对象 424
大对象(LOB)简介 424
包含大对象的表 425
包含CLOB数据列的表 425
包含BLOB数据列的表 426
包含BFILE数据列的表 427
在PL/SQL中使用大对象 429
APPEND() 429
CLOSE() 431
COMPARE() 432
COPY() 433
CREATETEMPORARY() 434
ERASE() 435
FILECLOSEALL() 436
FILEEXISTS() 436
FILEGETNAME() 437
FREETEMPORARY() 438
GETCHUNKSIZE() 439
GET_STORAGE_LIMIT() 439
GETLENGTH() 439
INSTR() 440
ISOPEN() 441
ISTEMPORARY() 441
LOADBLOBFROMFILE() 442
LOADCLOBFROMFILE() 442
OPEN() 444
READ() 445
SUBSTR() 446
TRIM() 447
WRITE() 447
WRITEAPPEND() 448
LONG和LONG RAW类型 448
包含LONG或LONG RAW
数据列的表 448
将LONG和LONG RAW数据列转
换为LOB 449
Oracle SQL语句优化 451
一般的SQL优化技巧 451
避免使用“*”替代所有列 451
用TRUNCATE代替DELETE 452
在确保完整性的情况下多用
COMMIT语句 453
减少表的查询次数 453
用EXISTS替代IN 453
用WHERE替代HAVING 454
使用“<=”替代“<" 455
表的连接 456
选择FROM表的顺序 456
WHERE子句的连接顺序 456
使用表的别名 457
有效使用索引 458
使用索引的基本事项 458
避免对索引列使用NOT
关键字 458
避免对唯一索引列使用
IS (NOT) NULL 459
选择复合索引主列 459
监视索引是否被使用 460
备份与恢复篇
用户管理的备份与恢复 461
数据库备份与恢复 461
数据库备份 461
数据库恢复 464
用户管理的备份 465
备份命令 466
完全数据库脱机备份 466
部分数据库脱机备份 468
部分数据库联机备份 469
备份控制文件 471
验证备份数据 472
用户管理的完全恢复 473
用户管理的完全恢复机制 473
非归档模式下的数据库恢复 475
归档模式下的数据文件恢复 477
在MOUNT状态下对
SYSTEM表空间恢复 478
在OPEN状态下对数据文件
进行恢复 480
在OPEN状态中恢复未备份的
数据文件 482
恢复控制文件 483
用户管理的不完全恢复 486
不完全恢复机制 486
基于时间的恢复 488
基于更改的恢复 492
基于撤销的恢复 496
使用RMAN工具 499
RMAN简介 499
RMAN的特点 499
RMAN组件 500
保存RMAN资料档案库 503
配置RMAN 504
RMAN的基本操作 509
RMAN备份 512
RMAN备份类型 512
BACKUP命令 514
增量备份 516
备份数据库 517
多重备份 521
镜像复制 522
RMAN恢复 523
RMAN恢复机制 524
数据库非归档恢复 525
数据库归档恢复 527
块介质恢复 528
移动数据文件到新的位置 529
基于时间的不完全恢复 530
基于撤销的不完全恢复 531
基于更改的不完全恢复 532
其他操作 533
数据字典 533
LIST命令 534
SHOW命令 536
REPORT命令 536
数据加载与传输 538
Data Pump工具 538
Data Pump工具的特点 538
与数据泵相关的数据字典视图 539
使用Data Pump工具前的准备 539
Data Pump Export工具 540
Data Pump Export选项 540
使用Data Pump Export 543
Data Pump Import工具 547
Data Pump Import选项 547
使用Data Pump Import 550
表空间的传输 553
SQL*Loader 556
SQL*Loader概述 556
数据加载实例 557
Oracle闪回技术 561
闪回技术概述 561
闪回表(Flashback Table) 562
闪回表概述 562
使用闪回表 563
闪回删除(Flashback Drop) 565
回收站概述 565
使用闪回删除 567
管理回收站 568
闪回版本查询(Flashback
Version Query) 571
闪回版本查询概述 571
使用闪回版本查询 572
闪回事务查询(Flashback Transaction Query) 573
闪回事务查询概述 574
使用闪回事务查询 575
闪回数据库(Flashback Database) 576
闪回数据库概述 576
使用闪回数据库 579
闪回数据归档(Flashback Data
Archive) 581
闪回数据归档概述 581
创建与管理闪回数据归档区 582
使用闪回数据归档 583
清除闪回数据归档区数据 587
综合应用篇
酒店管理系统 589
系统分析与设计 589
需求分析 589
系统功能设计 590
数据库设计 590
创建数据表 590
视图设计 594
主键自增设计 595
公共模块设计 595
编写数据库连接类 595
封装常用的操作数据库的方法 597
DAO公共类 599
系统登录模块设计 600
设计登录窗体 601
用户名下拉菜单的实现 602
23.4.3 【登录】按钮的事件处理 602
用户管理模块设计 604
添加用户 604
删除用户 606
修改密码 607
收银结账模块设计 609
开单功能实现 609
签单功能实现 611
结账功能实现 612
个人论坛 615
系统分析与设计 615
需求分析 615
系统设计 615
数据库设计 616
用户表 616
版块表 617
帖子表 617
回复表 618
数据模型公共类 619
用户类 619
帖子和回复父类 619
帖子类 620
Dao实现 621
连接数据库 621
UserDao实现 623
BoardDao实现 625
ReplyDao实现 627
Web层实现 631
主界面 633
帖子列表 635
回复帖子 637
修改回复 639
删除回复 640
日志管理模块 642
准备工作 642
安装Oracle客户端 642
配置客户端实例 646
使用Oracle Net Manager
查看配置 650
使用工具测试连接 653
使用.NET程序测试连接 655
使用图形界面测试 658
数据库设计 660
创建表 660
创建主键和触发器 661
通用模块 662
编写数据库类 662
制作模板 664
实现首页 667
制作页面布局 667
编写实现代码 670
显示日志分类 673
显示最新日志 675
日志分类管理 676
查看分类 676
修改分类 678
删除分类 680
添加分类 680
日志管理 681
查看日志列表 681
查看日志正文 682
管理日志列表 684
添加日志 685
修改日志 688
留言本 690
准备工作 690
创建Net服务名 690
安装扩展 692
测试连接 693
数据库设计 695
功能实现 695
显示留言 695
发表留言 698
回复留言 701
删除留言 703
网络资源:
配套教学用书(配套教参、主课本等):
可替代教学用书:
丛书名称:
图书书评:
【欢迎来稿】 总编办:&&
客户服务:(010)
教师服务电话:010-6
反盗版举报电话:(010)
质量反馈:(010)
邮购电话:(010)
邮购地址:北京市海淀区清华大学出版社邮购组收 邮编:100084
读者服务部(购书):(010)
通讯地址:清华大学学研大厦 A 座 邮编:100084
网管信箱:
版权所有(C)2005 清华大学出版社有限公司
Copyrights @ 2005 by Tsinghua University Press. All Rights Reserved
京公网安备 48 号

我要回帖

更多关于 oracle clob 长度 的文章

 

随机推荐