ORACLE事务控制问题

mydb 2001-09-06 11:34:13
我对ORACLE事务控制迷惑
请问以下事务类型: 标准(stand)
离散(discrete)
独立(autonomous)
只读(read-only)
串行(serializable)
有什么区别,怎么应用?最好通俗一点!

解释一下:
set transaction isolation level serializable
set transaction isolation read only
的作用
...全文
1460 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
general2000 2001-09-10
  • 打赏
  • 举报
回复
同意
feiyangf 2001-09-10
  • 打赏
  • 举报
回复
to mydb:哦,这些东西我也是在网上找到的,建议你到www.google.com上看看。下面再贴一页收集的东东,可能对你理解有帮助。我的水平有限,不敢在已有全面讲解的文章面前擅自总结,你先看看。


本部分解释了在Oracle和Microsoft SQL Server事务是如何执行的,并且提供了所有数据库类型中锁定过程和并行问题之间的区别。
事务
在Oracle中,执行插入、更新或者删除操作时自动开始事务。一个应用程序必须给出一个COMMIT命令来保存数据库的所有修改。如果没有执行COMMIT,所有的修改都将后滚或者自动变成未完成的。
缺省情况下,Microsoft SQL Server在每次插入、更新或者删除操作之后自动执行一个COMMIT语句。因为数据是自动保存的,你不能后滚任何改变。你可以使用隐式的或者显式的事务模式来改变这个缺省行为。
隐式的事务模式允许SQL Server像Oracle一样运转,这种模式是用SET IMPLICIT_TRANSACTIONS ON语句激活的。如果该选项是ON并且当前没有突出的事务,则每一个SQL语句自动开始一个事务。如果有一个打开的事务,则不会有任何新的事务开始。打开的事务必须由用户用COMMIT TRANSACTION语句来显明的承诺,以使所有的改变生效并且释放所有的锁定。
一个显明的事务是一组由下述事务分隔符包围的SQL语句:
• BEGIN TRANSACTION [transaction_name]
• COMMIT TRANSACTION [transaction_name]
• ROLLBACK TRANSACTION [transaction_name | savepoint_name]
在下面这个例子中,英语系被改变为文学系。请注意BEGIN TRANSACTION和COMMIT TRANSACTION语句的用法。
Oracle Microsoft SQL
INSERT INTO DEPT_ADMIN.DEPT (DEPT, DNAME)
VALUES ('LIT', 'Literature')
/
UPDATE DEPT_ADMIN.CLASS
SET MAJOR = 'LIT'
WHERE MAJOR = 'ENG'
/
UPDATE STUDENT_ADMIN.STUDENT
SET MAJOR = 'LIT'
WHERE MAJOR = 'ENG'
/
DELETE FROM DEPT_ADMIN.DEPT
WHERE DEPT = 'ENG'
/
COMMIT
/ BEGIN TRANSACTION

INSERT INTO DEPT_ADMIN.DEPT (DEPT, DNAME)
VALUES ('LIT', 'Literature')

UPDATE DEPT_ADMIN.CLASS
SET DEPT = 'LIT'
WHERE DEPT = 'ENG'

UPDATE STUDENT_ADMIN.STUDENT
SET MAJOR = 'LIT'
WHERE MAJOR = 'ENG'

DELETE FROM DEPT_ADMIN.DEPT
WHERE DEPT = 'ENG'

COMMIT TRANSACTION
GO
所有显明的事务必须用BEGIN TRANSACTION...COMMIT TRANSACTION语句封闭。SAVE TRANSACTION语句的功能同Oracle中的SAVEPOINT命令是一样的,在事务中设置一个保存点,这样就可以进行部分后滚(roll back)了。
事务可以嵌套。如果出现了这种情况,最外层的一对创建并提交事务,内部的对跟踪嵌套层。当遇到一个嵌套的事务时,@@TRANCOUNT函数就增加。通常,这种显然的事务嵌套发生在存储程序或者有BEGIN…COMMIT对互相调用的触发器中。尽管事务可以嵌套,但是对ROLLBACK TRANSACTION语句的行为的影响是很小的。
在存储过程和触发器中,BEGIN TRANSACTION语句的个数必须和COMMIT TRANSACTION语句的个数相匹配。包含不匹配的BEGIN TRANSACTION和COMMIT TRANSACTION语句的存储过程和触发器在运行的时候会产生一个错误消息。语法允许在一个事务中调用包含BEGIN TRANSACTION和COMMIT TRANSACTION语句对的存储过程和触发器。
只要情况许可,就应该把一个大的事务分成几个较小的事务。确保每个事务都在一个单独的batch中有完整的定义。为了把可能的并行冲突减到最小,事务既不应该跨越多个batch,也不应该等待用户输入。把多个事务组合到一个运行时间较长的事务中会给恢复时间带来消极的影响,并且还会造成并行问题。
在使用ODBC编程的时候,你可以通过使用SQLSetConnectOption函数来选择显式或者隐式的事务模式。究竟该选择哪种模式要视AUTOCOMMIT连接选项的情况而定。如果AUTOCOMMIT是ON(缺省的),你就是在显式模式中。如果AUTOCOMMIT是OFF,则在隐式模式下。
如果你通过SQL Server Query Analyzer或者其他查询工具使用脚本,你可以显式的包括一个上面提到的BEGIN TRANSACTION语句,也可以利用SET IMPLICIT_TRANSACTIONS ON语句来开始脚本。BEGIN TRANSACTION的方法更灵活一些,而隐式的方法更适合Oracle。
锁定和事务孤立
Oracle和Microsoft SQL Server有着很不一样的锁定和孤立策略。当你把Oracle应用程序转化为SQL Server应用程序的时候,你必须考虑到这些不同以确保应用程序的可伸缩性。
Oracle对所有读数据的SQL语句隐式或者显式的使用一种多版本一致模型(multiversion consistency model)。在这种模型中,数据读者在读数据行以前,缺省的既不获得一个锁定也不等待其他的锁定解开。当读者需要一个已经改变但别的写入者还没有提交的数据时,Oracle通过使用后滚段来重建一个数据行的快照的方法来重新创建旧的数据。
Oracle中的数据写入者在更新、删除或者插入数据时要请求锁定。锁定将一直维持到事务结束,并且禁止别的用户覆盖尚未提交的修改。
Microsoft SQL Server使用多粒度锁定,该锁定允许用事务来锁定不同类型的资源。为了把锁定的开销降到最低,SQL Server自动在与任务相配的层次上锁定资源。以较小的间隔尺寸锁定,例如行,增强了并行,但是管理开销较大,因为如果有许多行锁定,就必须维持多个锁定。以较大的间隔尺寸锁定,例如表,在并行方面是昂贵的,因为对整个表的锁定限制了其他事务对表中任何一部分的访问,但是管理开销却比较小,因为只要维持少数几个锁定。SQL Server可以锁定这些资源(按照间隔尺寸递增的顺序排列)。
资源 描述
RID 行标识符。用于一个单行表的独立锁定。
Key 键;索引中的一个行锁定。用于在一个可串行化的事务中保护键范围。
Page 8-KB数据页或者索引页。
Extent 相邻的八个数据页或者索引页的组。
Table 整个表,包括所有数据和索引。
DB 数据库。
SQL Server使用不同的锁定模式锁定资源,使用哪种模式决定了当前事务访问如何访问资源。
锁定模式 描述
Shared (S) 用于那些不修改或者更新数据的操作(只读操作),例如一个SELECT语句。
Update (U) 用于那些可以被更新的资源。防止当多个会话被读入、锁定,然后潜在的更新资源时发生一个公共形式的死锁。
Exclusive (X) 用于数据修改操作,例如UPDATE、INSERT、或者DELETE。确保不会同时发生对同一个资源的多个修改操作。
Intent 用于建立一个锁定层次。
Schema 在一个依靠表的模式的操作执行时使用。有两种类型的模式锁定:schema stability (Sch-S)和schema modification (Sch-M)。
对于任何RDBMS都很重要的一点是,快速释放锁定以提供最大的并行性。你可以通过尽可能短的保持一个事务来确保快速释放锁定。如果可能的话,事务不应该跨越多个往返行程到服务器,也不应该包括用户“思考”的时间。如果你使用游标,你也应该使你的应用程序很快提取数据,因为未提取数据的扫描将在服务器上占据共享锁定,因此将阻碍更新。欲了解更多信息,请参看本章后面的“使用ODBC”部分。
改变缺省的锁定行为
Microsoft SQL Server和Oracle都允许开发人员使用非缺省的锁定和孤立行为。在Oracle中,最普通的机制是SELECT 命令的FOR UPDATE子句,SET TRANSACTION READ ONLY命令,以及显式的LOCK TABLE命令。
因为两者的锁定和孤立策略如此不同,所以很难在Oracle和SQL Server之间直接映射锁定选择。要更好的理解这一过程,重要的一点是理解SQL Server提供的修改缺省锁定行为的选择。
在SQL Server中,修改缺省锁定行为最常用的机制是SET TRANSACTION ISOLATION LEVEL语句和在SELECT和UPDATE语句中支持的锁定暗示。SET TRANSACTION ISOLATION LEVEL语句为一个用户会话的持续时间设定事务孤立级别。除非在一个SQL语句的FROM子句中标明了表级别的锁定暗示,否则这将变成该会话的缺省行为。事务孤立是这样设定的:
SET TRANSACTION ISOLATION LEVEL
{
READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}
• READ COMMITTED
缺省的SQL Server孤立级别。如果你使用这种选择,你的应用程序将不能读取其他事务还没有提交的数据。在这种模式下,一旦数据从页上读出,仍然要释放共享锁定。如果应用程序在同一个事务中重新读取同一个的数据区,将会看到别的用户做的修改。
• SERIALIZABLE
如果设定了这种选择,事务将同其他事务孤立起来。如果你不希望在查询中看到其他用户做的修改,你可以设置事务的孤立级别为SERIALIZABLE。SQL Server将占据所有的共享锁定,直到事务结束。你可以通过在SELECT语句中表名的后面使用HOLDLOCK暗示来在一个更小的级别上取得同样的效果。
• READ UNCOMMITTED
如果设定为这种选择,SQL Server读者将不会受到阻塞,就像在Oracle中一样。该选择实现了污损读取或者说是孤立级别为0的锁定,这意味着不使用任何共享锁定并且也不使用任何独占的锁定。当这个选项选定后,有可能会读到未提交的或者污损的数据;在事务结束以前,数据可能会改变,数据集中的行可能出现也可能消失。这个选项同一个事务中在所有SELECT语句中设定所有的表为NOLOCK的效果是一样的。这是四种孤立级别中限制性最小的一种。只有在你已经彻底的搞清楚了它将对你的应用程序结果的精确度有什么样的影响的前提下才能使用这种选择。
SQL Server有两种方法实现Oracle中的READ ONLY功能:
• 如果一个应用程序中的事务需要可重复读取的行为,你也许需要使用SQL Server提供的SERIALIZABLE孤立级别。
• 如果所有的数据库访问都是只读的,你可以设置SQL Server数据库选项为READ ONLY来提高性能。
SELECT…FOR UPDATE
当一个应用程序利用WHERE CURRENT OF 语法来在一个游标上实现定位更新或者删除时,首先使用Oracle中的SELECT…FOR UPDATE语句。在这种情况下,可以随意去掉FOR UPDATE子句,因为Microsoft SQL Server游标的缺省行为是“可更新的”。
缺省情况下,SQL Server游标在提取行下不占据锁定。SQL Server使用一种乐观的并行策略(optimistic concurrency strategy)来防止更新时相互之间的覆盖。如果一个用户试图更新或者删除一个读入游标后已经被修改过的行,SQL Server将给出一个错误消息。应用程序可以捕获该消息,并且重新进行适当的更新或者删除。要改变这个行为,开发人员可以在游标声明中使用SCROLL_LOCKS。
通常情况下,乐观的并行策略支持较高的并行性,所谓通常情况是指更新器之间冲突很少的情况。如果你的应用程序确实需要保证一行在被提取以后不会被修改,你可以在SELECT语句中使用UPDLOCK暗示。这个暗示不会阻碍别的读者,但是它禁止其他潜在的写入者也获得该数据的更新锁定。使用ODBC时,你可以通过使用SQLSETSTMTOPTION (…,SQL_CONCURRENCY)= SQL_CONCUR_LOCK来达到同样的目的。但是,其他的任何选择都将减少并行性。
表级别的锁定
Microsoft SQL Server可以用SELECT…table_name (TABLOCK)语句来锁定整个表。这和Oracle的 LOCK TABLE…IN SHARE MODE语句是一样的。该锁定允许其他人读取一个表,但是禁止他们修改该表。缺省情况下,锁定将维持到语句的结束。如果你同时加上了HOLDLOCK关键字(SELECT…table_name (TABLOCK HOLDLOCK)),表的锁定将一直维持到事务的结束。
可以用SELECT…table_name (TABLOCKX)语句在一个SQL Server表上设置一个独占的锁定。该语句请求一个表上的独占锁定。该锁定禁止其他人读取和修改该表,并且将一直维持到命令或者事务结束。这同Oracle中TABLE…IN EXCLUSIVE MODE语句的功能是一样的。
SQL Server没有为显式的锁定请求提供NOWAIT选项。
锁定升级
当一个查询向表请求行时,Microsoft SQL Server自动生成一个页级别的锁定。但是,如果查询请求表中的大部分行时,SQL Server将把锁定从页级别升级到表级别。这个过程叫做锁定升级。
锁定增加使那些产生较大结果集的表的扫描和操作更加有效,因为它减少了锁定的管理开销。缺少WHERE子句的SQL语句一般都要造成锁定增加。
在读取操作中,如果一个共享页级别的锁定增加为一个表锁定时,将应用一个共享表锁定(TABLOCK)。在下列情况下应用共享的表级别的锁定:
• 使用了HOLDLOCK或者SET TRANSACTION ISOLATION LEVEL SERIALIZABLE语句。
• 优化器选择了一个表的扫描。
• 表中积累的共享锁定的数目超过锁定升级的极限。
表中缺省的锁定升级的极限是200页,但是该极限可以用最小和最大范围定制为依赖于表尺寸的一个百分比。欲了解关于锁定升级极限的更多信息,请参看SQL Server联机手册。
在一个写操作中,当一个UPDATE锁定被升级为一个表锁定时,应用一个独占表锁定(TABLOCKX)。独占表锁定在下列情况下使用:
• 更新或者删除操作无索引可用。
• 表中有独占锁定的页的数目超过锁定升级上限。
• 创建了一个分簇的索引。
Oracle不能升级行级别的锁定,这将导致一些包含了FOR UPDATE子句的查询出问题。例如,假设STUDENT表有100,000行数据,并且一个Oracle用户给出下列语句:
SELECT * FROM STUDENT FOR UPDATE
这个语句强制Oracle RDBMS依次锁定STUDENT表的一行;这将花去一段时间。它永远也不会要求升级锁定到整个表。
在SQL Server同样的查询是:
SELECT * FROM STUDENT (UPDLOCK)
当这个查询运行的时候,页级别的锁定升级为表级别的锁定,后者更加有效并且明显要快一些。
mydb 2001-09-10
  • 打赏
  • 举报
回复
能简单、明了、直白些吗?
sohucsdnvc 2001-09-06
  • 打赏
  • 举报
回复
?
mydb 2001-09-06
  • 打赏
  • 举报
回复
to feiyangf(萧云)
你说的这些,在哪能找到?
tigerwood12345 2001-09-06
  • 打赏
  • 举报
回复
楼上的说完了,没的说了
feiyangf 2001-09-06
  • 打赏
  • 举报
回复
SET
名称
SET — 为会话设置运行时参数
SET variable { TO | = } { 'value' | DEFAULT }
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }

输入
variable
可设置的全局变量.
value
参数的新值.
可能的变量和许可的值是.
CLIENT_ENCODING | NAMES
设置多字节客户端编码。参数是:

value
把客户端多字节编码设为 value。声明的编码方式必须为后端支持。
这个特性只有在对制作 Postgres 的配置阶段声明了 MULTIBYTE 支持后才生效。
DateStyle
设置日期/时间表示风格。影响输出格式,并且在某些时候会影响输入的解释。

ISO
使用 ISO 8601-风格的日期和时间
SQL
使用 Oracle/Ingres-风格的日期和时间
Postgres
使用传统 Postgres 格式
European
使用 dd/mm/yyyy 作为数字日期表达式.
NonEuropean
使用 mm/dd/yyyy 作为数字日期表达式.
German
使用 dd.mm.yyyy 作为数字日期表达式.
US
与 'NonEuropean'一样
DEFAULT
恢复缺省值 ('US,Postgres')
日期格式初始化可以用下面方法初始化:
设置 PGDATESTYLE 环境变量.如果一个基于 libpq 的客户端的环境里设置了 PGDATESTYLE,libpq 将在联接启动时自动把 DATESTYLE 设置成为 PGDATESTYLE 的值。
用 -o -e 参数运行 postmaster 可以把日期设置成 European 习惯.要注意的是这个只是对一些日期风格的组合有影响;例如 ISO 风格不被这个参数影响.
改变 src/backend/utils/init/globals.c里的变量

在 globals.c 里可以更改的变量是:
bool EuroDates = false | true
int DateStyle = USE_ISO_DATES | USE_POSTGRES_DATES | USE_SQL_DATES | USE_GERMAN_DATES


SERVER_ENCODING
设置多字节服务器端编码方式

value
设置多字节服务器编码方式。
这个特性只有在对制作 Postgres 的配置阶段声明了 MULTIBYTE 支持后才生效。
TIMEZONE
时区的可能值与你的操作系统有关.例如 Linux 的/usr/lib/zoneinfo 里面包含时区的数据库.

下面是时区的一些有效值.

'PST8PDT'
将时区设为 California (加州)
'Portugal'
将时区设为 Portugal (葡萄牙).
'Europe/Rome'
将时区设为 Italy (意大利).
DEFAULT
将时区设为你的本地时区(TZ 环境变量的值).
如果声明了一个无效时区,时区就会变成 GMT(在大多数系统上).
第二种语法在上面显示,它允许用户用一个类似于 SQL92 SET TIME ZONE 的语法设置时区.LOCAL 关键字只是用于 SQL92 兼容的 DEFAULT 可选的关键字.

如果一个基于 libpq 的客户端的环境里设置了 PGTZ,libpq 将在联接启动时自动把 TIMEZONE 设置成为 PGTZ 的值。

TRANSACTION ISOLATION LEVEL
给当前事务设置隔离级别。

READ COMMITTED
当前事务查询将只读取在查询之前提交的数据。READ COMMITTED 是缺省值。

注意:SQL92 标准要求 SERIALIZABLE 为缺省的隔离级别。

SERIALIZABLE
当前的事务查询只能读取在该事务里第一个 DML 语句(SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO)执行前的数据。
还有几个可以 SET 命令声明的用内部的或优化的参数:
RANDOM_PAGE_COST
设置优化器对非连续磁盘页面读取的开销的预计值。这是以连续页面读取的开销的倍数计算的。

float8
设置随机页面访问的开销为声明的浮点值。
CPU_TUPLE_COST
设置优化器处理查询里每条记录的开销的预计值。这是以连续页面读取的开销的分数进行计算的。

float8
把每条记录的 CPU 处理的开销设置声明的浮点值。
CPU_INDEX_TUPLE_COST
设置优化器进行索引扫描时处理每条索引记录的开销的预计值。这是以连续页面读取的开销的分数进行计算的。

float8
把每条索引记录的 CPU 处理的开销设置声明的浮点值。
CPU_OPERATOR_COST
设置优化器处理 WHERE 子句里每个操作符的开销的预计值。这是以连续页面读取的开销的分数进行计算的。

float8
把每个操作符的 CPU 处理的开销设置声明的浮点值。
EFFECTIVE_CACHE_SIZE
设置优化器对磁盘缓冲有效尺寸的假设(也就是说,将被 Postgres 数据文件使用的内核的磁盘缓冲的部分)。这是以磁盘页面计量的,通常每块 8Kb。

float8
把假设的缓冲尺寸设置为声明的浮点值。
ENABLE_SEQSCAN
允许或者禁止规划器对顺序扫描规划类型的使用。(完全禁止顺序扫描是不可能的,但是把这个变量置为 OFF 将导致规划器在存在其他可用方法的情况下不采用顺序扫描。)

ON
允许使用顺序扫描(缺省设置)。
OFF
禁止使用顺序扫描。
ENABLE_INDEXSCAN
允许或者禁止规划器对索引扫描规划类型的使用。

ON
允许使用索引扫描(缺省设置)。
OFF
禁止使用索引扫描。
ENABLE_TIDSCAN
允许或者禁止规划器对 TID 扫描规划类型的使用。

ON
允许使用 TID 扫描(缺省设置)。
OFF
禁止使用 TID 扫描。
ENABLE_SORT
允许或者禁止规划器对显式排序步骤的使用。(完全禁止显式排序步骤是不可能的,但是把这个变量置为 OFF 将导致规划器在存在其他可用方法的情况下不采用显式排序步骤。)

ON
允许使用排序(缺省设置)。
OFF
禁止使用排序。
ENABLE_NESTLOOP
允许或者禁止规划器对嵌套循环联合规划的使用。(完全禁止嵌套循环联合是不可能的,但是把这个变量置为 OFF 将导致规划器在存在其他可用方法的情况下不采用嵌套循环规划。)

ON
允许使用嵌套循环联合(缺省设置)。
OFF
禁止使用嵌套循环联合。
ENABLE_MERGEJOIN
打开或者关闭规划器对融合(merge join)联合规划的使用。

ON
允许使用融合(merge join)联合(缺省设置)。
OFF
禁止使用融合(merge join)联合。
ENABLE_HASHJOIN
打开或者关闭规划器对哈希(散列)规划的使用。

ON
允许使用哈希(散列)联合(缺省设置)。
OFF
禁止使用哈希(散列)联合。
GEQO
为使用基因优化器算法设置阈值.

ON
允许基因优化器算法优化带有11个或11个以上表的语句.(这也是缺省设置)
ON=#
带一个整数参数,允许优化器优化带有 # 或更多的表的查询.
OFF
禁用基因优化器.
请参考程序员手册中关于 GEQO 的章节获取关于查询优化的更多信息。
如果一个基于 libpq 的客户端的环境里设置了 PGGEQO 环境变量,libpq 将在联接启动时自动把 GEQO 设置成为 PGGEQO 的值。

KSQO
Key Set Query Optimizer (键集查询优化)导致查询规划器把 WHERE 子句带有许多 OR 了的 AND 子句的查询(象 "WHERE (a=1 AND b=2) OR (a=2 AND b=3) ...")转换成一个UNION 查询。这个方法可以比缺省的实现更快,但是它不一定得出相同的结果,因为 UNION 隐含的加了一条 SELECT DISTINCT 子句以消除相同的行。KSQO 常用于和 MicroSoft Access 这样的东西并用,它容易生成这种类型的查询。

ON
打开优化。
OFF
关闭优化(缺省设置)。
DEFAULT
等效于声明 SET KSQO='OFF'。
KSQO 算法对带有许多 OR 了的 AND 子句的查询是非常必要的,不过在 Postgres 7.0 和以后的版本里,标准的规划器可以很好的操作这些查询。
输出
SET VARIABLE
成功的返回信息.
WARN: Bad value for variable (value)
如果命令设置变量失败.返回此信息.
描述
SET 将在一个会话过程中为变量修改配置参数.
当前值可以使用 SHOW 获得,而且可以使用 RESET 命令将各个值设回缺省.参数和值都是大小写无关的.注意参数值总是用字符串来表达,所以用单引号括起来.

SET TIME ZONE 改变会话的缺省时区偏移量.一个 SQL-会话总是以缺省的时区偏移作为初始值. SET TIME ZONE 语句用于改变当前的 SQL 会话的缺省时区偏移量.

注意
SET variable 语句是 Postgres 语言的扩展.
请参考 SHOW 和 RESET 命令显示或重置当前值.

用法
设置时区风格为 ISO:
SET DATESTYLE TO 'ISO';

对4个或更多表的查询,使 GEQO 生效:

SET GEQO = 'ON=4';

设置 GEQO 为缺省值:

SET GEQO = DEFAULT;

把时区设置为 Berkeley, California:

SET TIME ZONE 'PST8PDT';
SELECT CURRENT_TIMESTAMP AS today;

today
----------------------
1998-03-31 07:41:21-08

设置时区为 Italy:

SET TIME ZONE 'Europe/Rome';
SELECT CURRENT_TIMESTAMP AS today;

today
----------------------
1998-03-31 17:41:31+02

兼容性
SQL92
在 SQL92 里没有 SET variable 语句(除了 SET TRANSACTION ISOLATION LEVEL)。SQL92 用于 SET TIME ZONE 的语法有一点点不同,只允许为时区声明一个整数值:
SET TIME ZONE { interval_value_expression | LOCAL }


--------------------------------------------------------------------------------
第一篇 Oracle管理配置 第1章 Oracle安装配置(教学视频:10分钟) 23 1.1 Oracle简介 23 1.1.1 数据库术语 23 1.1.2 主流数据库简介 24 1.1.3 Oracle数据库的特点 24 1.2 安装Oracle数据库 25 1.2.1 Oracle数据库的版本变迁及安装环境 25 1.2.2 安装过程 26 1.2.3 安装中需要注意的问题 27 1.3 本章小结 28 1.4 习题 28 第2章 Oracle常用工具(教学视频:7分钟) 29 2.1 Net Configuration Assistant(网络配置助手) 29 2.1.1 监听程序配置 29 2.1.2 命名方法配置 31 2.1.3 本地Net服务名配置 32 2.2 Net Manager(网络管理员) 34 2.3 本章实例 36 2.4 本章小结 38 2.5 习题 38 第3章 SQL Plus和PL/SQL(教学视频:11分钟) 39 3.1 SQL Plus与PL/SQL简介 39 3.2 使用SQL Plus 40 3.2.1 登录SQL Plus 40 3.2.2 SQL Plus输出结果的格式化 41 3.2.3 SQL Plus小结 46 3.3 PL/SQL 46 3.3.1 PL/SQL常用开发工具 46 3.3.2 开发一个简单的PL/SQL程序 48 3.4 本章实例 49 3.5 本章小结 50 3.6 习题 50 第二篇 Oracle数据库对象 第4章 Oralce数据库(教学视频:15分钟) 51 4.1 创建Oracle数据库 51 4.2 Oracle数据库的相关术语 52 4.2.1 数据库 53 4.2.2 数据库实例和SID 53 4.2.3 ORACLE_SID 54 4.3 Oracle数据库的备份与恢复 55 4.3.1 逻辑备份/恢复(导出/导入) 55 4.3.2 物理备份/恢复 56 4.3.3 利用PL/SQL Developer备份数据库 60 4.4 本章实例 61 4.5 本章小结 61 4.6 习题 62 第5章 Oracle数据表对象(教学视频:42分钟) 63 5.1 Oracle表空间 63 5.1.1 Oracle表空间简介 63 5.1.2 创建Oracle表空间 64 5.1.3 查看表空间 66 5.1.4 修改数据库默认表空间 67 5.1.5 修改表空间名称 68 5.1.6 删除表空间 69 5.2 创建Oracle数据表 70 5.2.1 利用工具创建数据表 70 5.2.2 利用工具查看数据表 71 5.2.3 利用命令创建数据表 72 5.2.4 利用命令查看表结构 72 5.3 修改Oracle数据表结构 73 5.3.1 利用工具修改数据表结构 73 5.3.2 利用命令修改数据表结构 74 5.4 删除数据表 75 5.4.1 利用工具删除数据表 76 5.4.2 利用SQL语句删除数据表 76 5.5 备份/恢复数据表 76 5.5.1 利用工具备份/恢复数据表 77 5.5.2 利用命令备份/恢复数据表 82 5.6 临时表 83 5.6.1 临时表简介 83 5.6.2 会话级临时表 84 5.6.3 事务级临时表 85 5.6.4 查看临时表在数据库中的信息 86 5.6.5 临时表的应用场景 86 5.7 特殊的表dual 87 5.7.1 分析dual表 87 5.7.2 dual表的应用场景 87 5.7.3 修改dual表对查询结果的影响 88 5.8 本章实例 89 5.9 本章小结 90 5.10 习题 90 第6章 约束(教学视频:43分钟) 91 6.1 主键约束 91 6.1.1 主键简介 91 6.1.2 创建主键约束 92 6.1.3 修改表的主键约束 94 6.1.4 主键应用场景 96 6.2 外键约束 97 6.2.1 外键简介 97 6.2.2 创建外键约束 97 6.2.3 级联更新与级联删除 100 6.2.4 修改外键属性 102 6.2.5 外键使用 104 6.3 唯一性约束 105 6.3.1 唯一性约束简介 105 6.3.2 创建唯一性约束 105 6.3.3 修改唯一性约束 107 6.3.4 唯一性约束的使用 108 6.4 检查约束 108 6.4.1 检查约束简介 108 6.4.2 创建检查约束 108 6.4.3 修改检查约束 110 6.4.4 检查约束的使用 111 6.5 默认值约束 111 6.5.1 默认值约束简介 112 6.5.2 创建默认值约束 112 6.5.3 修改默认值约束 113 6.6 本章实例 115 6.7 本章小结 116 6.8 习题 116 第7章 视图(教学视频:50分钟) 117 7.1 关系视图 117 7.1.1 建立关系视图 117 7.1.2 修改/删除视图 118 7.1.3 联接视图 120 7.1.4 编译视图 122 7.1.5 使用force选项强制创建视图 124 7.1.6 利用视图更新数据表 125 7.1.7 with check option选项 126 7.1.8 关系视图小结 128 7.2 内嵌视图 128 7.2.1 内嵌视图简介 128 7.2.2 内嵌视图的使用 128 7.2.3 内嵌视图小结 130 7.3 对象视图 131 7.3.1 对象视图简介 131 7.3.2 对象视图简介 131 7.4 物化视图 133 7.4.1 物化视图简介 133 7.4.2 物化视图的使用 133 7.4.3 物化视图的数据加载 135 7.4.4 物化视图的数据更新 135 7.4.5 查询重写 136 7.5 本章小结 136 7.6 本章实例 137 7.7 习题 137 第8章 函数与存储过程(教学视频:48分钟) 138 8.1 函数 138 8.1.1 函数简介 138 8.1.2 创建函数 139 8.1.3 函数中的括号 140 8.1.4 函数的参数 141 8.1.5 函数的确定性 142 8.1.6 典型函数举例 143 8.2 存储过程 144 8.2.1 存储过程简介 144 8.2.2 创建存储过程 144 8.2.3 存储过程的参数——IN参数 146 8.2.4 存储过程的参数——OUT参数 147 8.2.5 存储过程的参数——IN OUT参数 149 8.2.6 存储过程的参数——参数顺序 149 8.2.7 存储过程的参数——参数的默认值 152 8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 主体 155 8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11章 序列(教学视频:28分钟) 206 第12章 用户角色与权限控制(教学视频:45分钟) 215 第三篇 Oracle中的SQL 第13章 Oracle数据类型(教学视频:21分钟) 231 第14章 Oracle中的函数与表达式(教学视频:111分钟) 240 第15章 Oracle中的控制语句(教学视频:16分钟) 282 第16章 SQL查询(教学视频:55分钟) 290 第17章 SQL更新数据(教学视频:34分钟) 319 第四篇 Oracle编程高级应用 第18章 数据库速度优化与数据完整性(教学视频:32分钟) 332 第19章 数据一致性与事务管理(教学视频:46分钟) 341 第20章 并发控制(教学视频:35分钟) 356 第21章 Oracle中的正则表达式(教学视频:29分钟) 369 第五篇 Oracle与编程语言综合使用实例 第22章 Oracle在Java开发中的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发中的应用(教学视频:12分钟) 391

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧