PL/SQL Transaction Control
PL/SQL 基础 ( 下 )
1. PL/SQL中的 SQL语句
- END语句与COMMIT等内容,没有任何关系。
- PL/SQL does not directly support data definition language( DDL ) statements, such as CREATE TA BLE, ALTER TABLE, or DROP TABLE.
- PL/SQL does not support data control language( DCL ) statements, such as GRANT or REVOKE.
- 每条 SQL语句后边都要有个 ; 分号.
- PL/SQL 可以通过设置 exception 来管理错误,例如 NO_DATA_FOUND , TOO_MANY_ROWS
2. SQL 游标 (简单介绍 )
A cursor is a private SQL work area.
2种类型 : 隐式游标,显式游标
隐式游标 : The Oracle server uses implicit cursors to parse and execute your SQL statements. ( Whenever you issue a SQL statement, the Oracle server opens an area of memory in which the command is parsed and executed. this area is called a cursor.
When the executable part of a block issues a SQL statement, PL/SQL creates an implicit cursor, which PL/SQL manages automatically.
显式游标 : Explicit cursors are explicitly declared by the programer. ( 以下为游标的属性 )
- SQL%ROWCOUNT
- SQL%FOUND
- SQL%NOTFOUND
- SQL%ISOPEN
注意此处 : 只是单纯的使用 SQL%ROWCOUNT , 并没有定义显示游标,因为这是隐式游标,证明 ORACLE在解析SQL语句时,使用隐式游标。
3. Transaction Control Statement
COMMIT [ WORK ];
SAVEPOINT savepoint_name;
ROLLBACK [WORK] ;
ROLLBACK [WORK] TO [SAVEPOINT] savepoint_name;
其中 : 貌似 WORK 没什么用.
4. 选择语句 & 循环语句
IF condition THEN
ELSIF condition THEN // 注意,此处 ELSIF , 没有那个E
ELSE
END IF; // 最后,结束要有 ; 分号
CASE selector
WHEN expression1 THEN result1 // 这后边什么符号也没有
WHEN expression2 THEN result2
……
WHEN expressionN THEN resultN
ELSE resultN+1
END ; // 要有 END 和 ; 分号
注意 NULL : not NULL 还是 NULL , 与 NULL 的计算也全部是 NULL ,
-- basic loop ( use the basic loop when the statements inside the loop must execute at least once )
LOOP
statement 1;
EXIT [WHEN condition] ;
END LOOP;
--while loop ( use the while loop if the condition has to be evaluated at the start of each iteration )
WHILE condition LOOP
statement1;
statement2;
…
END LOOP;
--for loop ( use a for loop if the number of iterations is known )
FOR counter IN [REVERSE] lower_bound..upper_bound LOOP // counter 不用自己定义,系统会直接定义 , REVERSE 表示递减, 否则表示递增,增减幅度 1
statement1;
statement2;
…
END LOOP;
例如 :
FOR i IN 1..3 LOOP
END LOOP; // 增 , i 不用定义
FOR i IN REVERSE 1..3 LOOP
END LOOPS // 减, 注意后边的区间不用去改,还是从低到高
--嵌套循环
循环之间可以互相嵌套,多层,可以使用 label 来跳到想要走的位置,label要放到对应代码的上边,
在 END LOOP 后边写上标志 ( inner_loop, outer_loop ) 是好习惯。
5. Composite Data Types
- PL/SQL records
- PL/SQL collections ( index by table , nested table, varray ) ( 貌似这种不常用 )
( 就是将多种相关的数据集中在一起看,比如 employeer, 有 name, salary, birthday, 等等,虽然 name, slary, birthday 他们的存储类型不同,但是由于相关性,所以将它们作为一个整体来看 )
TYPE type_name IS RECORD
( field_declaration, field_declaration );
identifier type_name;
例如 :
TYPE emp_record_type IS RECORD
( employee_id NUMBER(6) NOT NULL := 100,
last_name VARCHAR2(25),
job_id VARCHAR2(10),
salary NUMBER(8, 2) ) ;
emp_record emp_record_type;
emp_record.job_id := ‘ST_CLERK’;
这种十分类似C中的结构体
%ROWTYPE
DECLARE
emp_record employees%ROWTYPE;
to declare a record based on a collection of columns in a database table or view, you use the %ROWTYPE attribute.
使用 ROWTYPE 的好处,1) 可以动态变更,即当基表本身发生变更时,ROWTYPE会随之变更,2)特别是在你想要将全部内容都掉出去来时,可以使用 SELECT * FROM TABLE INTO 该类型,省去了很多打字操作。
INDEX BY Tables
由两部分组成 ( 主键和列 )
- Primary key of data type BINARY_INTEGER
- Column of scalar or record data type ( 1列,或者是标准类型列,或者是组合类型列 )
TYPE type_name IS TABLE OF
{column_type variable%TYPE | table.column%TYPE | table.%ROWTYPE} [INDEX BY BINARY_INTEGER] ;
identifier type_name;
例如 :
TYPE ename_table_type IS TABLE OF
employees.last_name%TYPE
INDEX BY BINARY_INTEGER ;
ename_table ename_table_type;
( 有点像 XML )
如果定义为 INDEX BY Table 类型,会有很多方法, EXISTS , NEXT, COUNT, TRIM, FIRST AND LAST, DELETE, PRIOR
6. 权限管理相关内容
system privileges 包含 CREATE or ANY 关键字的是 系统权限
系统权限是由 SYS, SYSTEM 给予的,
Object privilege are rights assigned to a specific object within a shema and always include the name of object.
如果想创建 subprogram ( procedure , function ) , 必须有 CREATE PROCEDURE quanxian ,
if a PL/SQL subprogram refers to any objects that are not in the same schema, you must be granted access on these explicity, not through a role.
如果想调用 subprogram , 必须要有 EXECUTE object privilege.
Stored Information |
Description |
Access Method |
General | Object information | The USER_OBJECTS 数据字典 |
Source code | Text of the procedure | USER_SOURCE |
Parameters | IN / OUT / IN OUT datatype | describe command |
P-code | Compiled object code | Not accessible |
Compile errors | PL/SQL syntax errors | USER_ERRORS |
Run-time debug information | User-specified debug variables and messages | The DBMS_OUTPUT |
可以使用 show errors , 查看编译错误,( 这些内容也是存储在 USER_ERRORS 中的 )
DESCRIBE query_employee ( 查看 procedure 等内容, 跟 desc table_name 差不多 )
也可以是用 DBMS_OUTPUT 来显示内容,调试使用 ( 类似到处的 printf , 查看某些变量的内容 )
- 提示内容1 :Message upon entering, leaving a procedure, or indicating that an operation has occured
- 提示内容2 :Counter for a loop
- 提示内容3 :Value for a variable before and after an assignment.
DBMS_DEBUG ( 一些工具, 例如 PL/SQL DEVELOPER, 提供单步跟踪等等 )
PL/SQL Transaction Control的更多相关文章
- pl/sql tutorial
http://plsql-tutorial.com/plsql-procedures.htm What is PL/SQL? PL/SQL stands for Procedural Language ...
- SQL with PL/SQL
DDL commands --> create user / table / view / sequence alter DML --> data manipulation languag ...
- Oracle PL/SQL Articles
我是搬运工....http://www.oracle-base.com/articles/plsql/articles-plsql.php Oracle 8i Oracle 9i Oracle 10g ...
- Using PL/SQL APIs as Web Services
Overview Oracle E-Business Suite Integrated SOA Gateway allows you to use PL/SQL application program ...
- postgreSQL PL/SQL编程学习笔记(二)
Control Structures of PL/SQL Control structures are probably the most useful (and important) part of ...
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
- PL/SQL异常处理方法
PL/SQL异常处理方法 1:什么是异常处理: PL/SQL提供一个功能去处理异常,在PL/SQL块中叫做异常处理,使用异常处理我们能够测试代码和避免异常退出. PL/SQL异常信息包含三个部分: ...
- PL/SQL : Procedural Language / Structual Query Language and it is an exrension to SQL.
SQL is not very flexible and it cannot be made to react differently to differing sutuations easily. ...
- win7 64位系统 Oracle32bit + PL/SQL访问Orale服务,Oracle 11g的安装,中文乱码问题的解决
前几天装了个Oracle32bit客户端 + PL/SQL连接不上oracle,我安装完打开PL/SQL登录界面跟正常的界面不一样,没有那个连接为Normal.SYSDBA的选项,下面有解释,至于我为 ...
随机推荐
- app名字后面的描述怎么加?
构建一个最新的版本 更改一下 名称即可
- 【Android】OPlayer升级Vitamio到4.1
前言 很久没有更新OPlayer,还是使用旧版Vitamio 3.0版本(新版已经到4.1),这次更新下. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.c ...
- GCD中的dispatch_barrier_async函数的使用(栅栏函数)
<一>什么是dispatch_barrier_async函数 毫无疑问,dispatch_barrier_async函数的作用与barrier的意思相同,在进程管理中起到一个栅栏的作用,它 ...
- iOS & Mac JSON To Model
NSString * jsonPath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Cont ...
- 2.2 CMMI2级——项目计划(Project Planning)
大家都明白这样的一个道理:做事情要有计划,有一个不成熟的计划总比没有计划要好,软件开发这么复杂的活动,更加需要计划.那么应该怎样做好一个计划呢? 如果对项目的范围.规模.性质.任务.工作量.费用等都不 ...
- WPF学习之路(五) 实例:写字板
写字板实例一 MainWindow.xaml <Window x:Class="Wordpad01.MainWindow" xmlns="http://schema ...
- android ProGuard 代码混淆实现
1 修改project.properties,添加ProGuard配置项 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt: ...
- Aforge.net之旅——开篇:从识别验证码开始
时间过得真快啊,转眼今年就要过去了,大半年都没有写博客了,要说时间嘛,花在泡妹子和搞英语去了,哈哈...前几天老大问我 怎么这么长时间都没写博客了,好吧,继续坚持,继续分享我的心得体会. 这个系列我们 ...
- SSRS报表连接超时的问题
这段时间遇到一个问题就是ReportService 中采用了远程连接的报表偶尔会断开连接,导致报表导出异常,查阅了很多资料,几天来就是断断续续的终于解决了这个问题,下面把一些解决的点一一展示出来,便于 ...
- 烂泥:学习Nagios(二):Nagios配置
本文由秀依林枫提供友情赞助,首发于烂泥行天下 nagios安装完毕后,我们现在就来配置nagios.有关nagios的安装,可以参考<烂泥:学习Nagios(一):Nagios安装>这篇文 ...