PLSQL Language Referenc-PL/SQL静态SQL-自治事务-从SQL调用自治函数
从SQL调用自治函数 从SQL语句调用的函数必须遵守意在控制副作用的规则。为了检测对规则的违背,要使用RESTRICT_REFERENCES编译指示。该编译指示警告函数没有读写数据库表或包变量。 根据定义,自治程序永远不会违背read no database state(RNDS)和write nodatabase state(WNDS) deb...
PLSQL Language Referenc-PL/SQL静态SQL-自治事务-自治事务触发器
自治事务触发器 运行DCL或DDL语句的触发器必须是自治的;为了运行DDL语句,触发器必须使用本地动态SQL(EXECUTE IMMEDIATE)。 触发器的用途之一就是明确地记录事件,例,将所有的更新操作记录到表中,即使它被回滚了。 emp emp employees ...
PLSQL Language Referenc-PL/SQL静态SQL-自治事务-控制自治事务
控制自治事务 自治程序中的第1条SQL语句开始了一个事务。当一个事务结束之后,下一个SQL语句开始了另一个事务。上一次提交或回滚之后所有SQL语句构成了当前的事务,控制自治事务需要使用下面的语句: ;ROLLBACK[ savepoint_name savepoint_name TRANSACTION...
PLSQL Language Referenc-PL/SQL静态SQL-自治事务(二)
事务上下文 主事务与嵌套程序共享它的上下文,但不与自治事务共享上下文。当一个自治程序调用另一个程序或递归调用,则程序不会共享事务上下文;当一个自治程序调用另一个非自治程序,则程序共享相同的事务上下文。 事务可见性 当自治事务提交时,自治事务所做的改变可以被其它事务看到。 如果隔离级别设...
PLSQL Language Referenc-PL/SQL静态SQL-事务处理和控制-覆盖默认的锁
覆盖默认的锁 默认,Oracle数据库会自动锁住数据结构,这允许不同的应用程序在互不破坏他人数据和互不协调的情况下写相同的数据结构。 如果需要在事务中排除访问,可以覆盖默认的锁: LOCK TABLE,显式地锁住整个表 带有FOR UPDATE子句的SELECT,显式地锁住表的特定行。 (1)LOCK TABLE语句 该...
PLSQL Language Referenc-PL/SQL静态SQL-事务处理和控制-set transaction语句
settransaction语句 可以使用SETTRANSACTION语句来开始一个只读或读写事务、设置隔离级别、设置当前的事务到特定的回滚段。只读事务对于当其它用户更新相同的表时运行多个查询特别有用。 NUMBER122 NUMBER122 NUMBER122...
PLSQL Language Referenc-PL/SQL静态SQL-事务处理和控制-隐式回滚
隐式回滚 在执行INSERT、UPDATE、DELETE语句之前,数据库会声明一个隐式保存点。如果语句执行失败,数据库会回滚到该保存点。通常只有失败的语句被回滚,而不是整个事务。如果语句引发一个不可处理的异常,则宿主环境决定什么被回滚。 数据库也可以回滚单个SQL语句来打破死锁。数据库给多个SQL语句组成的事务发一...
PLSQL Language Referenc-PL/SQL静态SQL-事务处理和控制-savepoint语句
savepoint语句 savepoint语句命名和标记事务处理中的当前点。使用savepoing可以回滚事务的一部分,而不是整个事务。对于会话而言,活动的savepoint的数目是没有限制的。 emp_name emp_name SELECT,, employees CREA...
PLSQL Language Referenc-PL/SQL静态SQL-事务处理和控制-rollback语句
rollback语句 rollback语句结束当前的事务,并撤销在该事务中的任何改变。 如果犯了错误,如错误地删除一行,回滚语句可以恢复原始的数据。 因为SQL语句失败或PL/SQL语句引发异常,回滚可以让你更正错误从新开始。 emp_name emp_name employee_id last_name em...
PLSQL Language Referenc-PL/SQL静态SQL-事务处理和控制
事务处理和控制 事务是一个或多个SQL语句的序列,Oracle数据库将它们看作是一个单元,或者所有语句都被执行,或者都不执行。 事务处理是Oracle数据库的一个功能,允许多个用户同时工作于数据库上并确保每个用户可以数据的一致版本,确保所有的改变可以以正确的顺序被应用。 不同的用户可以在不互相破坏他人数...
PLSQL Language Referenc-PL/SQL静态SQL-光标表达式
光标表达式 光标表达式返回嵌套光标。 () 可以在非子查询的SELECT语句中使用光标表达式,或将它传递给接受光标变量参数的函数。不能通过隐式光标使用光标表达式。...
PLSQL Language Referenc-PL/SQL静态SQL-光标变量-光标变量作为宿主变量
光标变量作为宿主变量 宿主变量主要用于在PL/SQL存储存储子程序和它的客户端之间传递查询结果集。当光标变量为宿主变量的时候,PL/SQL和它的客户(宿主环境)共享存储查询结果集的SQL工作区指针。 为了把光标变量作为宿主变量,需要在宿主环境中声明光标变量,然后把它作为输入宿主变量(绑定变量)传递给PL/SQL...
PLSQL Language Referenc-PL/SQL静态SQL-光标变量-光标变量作为子程序参数
光标变量作为子程序参数 光标变量可以作为子程序参数用于在子程序之间传递查询结果集: 可以在一个子程序中打开光标变量,在其它的子程序中处理它。 在多语言应用中,PL/SQL子程序可以使用光标变量返回查询结果给用其它语言写的子程序。 注意:调用和被调用的子程序需要位于相同的数据库实例中,不能向通...
PLSQL Language Referenc-PL/SQL静态SQL-光标变量-光标变量查询中的变量
光标变量查询中的变量 与光标变量相关查询可以引用它的作用域内的任何变量。当使用OPEN FOR语句打开光标变量时,PL/SQL会计算查询中的任何变量值来识别结果集。后面对变量值的修改,不会改变结果集。 .%; sal_multiple employeessalaryTYPE ...
PLSQL Language Referenc-PL/SQL静态SQL-光标变量-光标变量赋值
光标变量赋值 可以使用另外的光标变量或宿主变量给光标变量赋值。 :=;
PLSQL Language Referenc-PL/SQL静态SQL-光标变量-打开和关闭光标变量
打开和关闭光标变量 声明了光标变量之后,可以使用OPENFOR语句来打开它,具体做了如下的事情: n 将光标变量与查询关联起来(通常查询返回多行),查询中可以包含绑定变量的占位符,它们的值通过USING子句来指定。 n 分配处理查询的数据库资源。 n 处理查询:识别结果集;如果查询有F...
PLSQL Language Referenc-PL/SQL静态SQL-光标变量-创建光标变量
创建光标变量 n 定义REF CURSOR类型,然后声明该变量的变量 n 声明SYS_REFCURSOR的变量 光标变量通常被称为引用光标。 type_name return_type DECLARE empcurtyp employeesROWTYPE TYPEISREFCURSOR  ...
PLSQL Language Referenc-PL/SQL静态SQL-光标变量
光标变量 光标变量就像一个显式光标,除了: n 它没有被限制到一个查询。可以将同一个光标变量与多个查询相关联。 n 可以给光标变量赋值。 n 可以在表达式中使用光标变量 n 可以作为子程序的参数。可以使用光标变量在子程序之间传递查询结果集。 n 可以是宿主变量...
PLSQL Language Referenc-PL/SQL静态SQL-带有子查询的查询结果集处理
带有子查询的查询结果集处理 如果通过循环来处理结果集,并且对于每一行都运行另一个查询,则可以通过移除循环中的第2个查询,并使第2个查询成为第1个查询的子查询。 from子句中DECLARE c1 SELECT.,, departments t1 ...
PLSQL Language Referenc-PL/SQL静态SQL-使用显式光标OPEN-FETCH-CLOSE处理查询结果集
使用显式光标OPEN-FETCH-CLOSE处理查询结果集 为了完成控制查询结果集处理,需要声明显式光标并使用OPEN-FETCH-CLOSE语句来管理它。 这种结果集处理技术非常复杂,但具有更多的灵活性: n 可以使用多个光标,并行处理多个结果集。 n 在单次循环迭代中处理多行、跳过行或将处理拆分为多个循...