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的选项,下面有解释,至于我为 ...
随机推荐
- iOS9 HTTP 通信报错解决方案
UIWebView *myview = [[UIWebView alloc] initWithFrame:CGRectMake(, , [UIScreen mainScreen].bounds.siz ...
- android app设计内容
1.logo-main-模块页: 2.logo页包括:背景.版本号.图标.软件名.blog等内容:
- js去掉字符串前后空格的五种方法
转载 :http://www.2cto.com/kf/201204/125943.html 第一种:循环检查替换[javascript]//供使用者调用 function trim(s){ ret ...
- 理解 Statement 和 PreparedStatement
java,servlet中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以Prepar ...
- 驳 GarbageMan 的《一个超复杂的简介递归》——对延迟计算的实验和思考
这是一篇因骂战而起的博文,GarbageMan 在该文章回复中不仅对我进行了侮辱,还涉及了我的母校,特写此文用理性的分析和实验予以回击. 在此也劝告 GarbageMan,没什么本事就别在那叫嚣了,还 ...
- RabbitMq 技术文档
RabbitMq 技术文档 目录 1 AMQP简介 2 AMQP的实现 3 RabbitMQ简介 3.1 概念说明 3.2 消息队列的使用过程 3.3 RabbitMQ的特性 4 RabbitMQ使用 ...
- 用批处理来自动化项目编译及部署(附Demo)
阅读目录 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 介绍 详细 处理 结论 Demo下载 介绍 一个项目从立项开始,可能就已经根据公司的配置模板将 ...
- Fiddler基本原理与抓取Andriod与IOS的App数据包
Fiddler基本原理 Fiddler数据包的原理是Fiddler将自己设置为一个代理服务器,默认监听127.0.0.1:8888端口同时将浏览器的HTTP.HTTPS协议设置为使用代理服务器也就是使 ...
- Kali Linux 秘籍/Web渗透秘籍/无线渗透入门
Kali Linux 秘籍 原书:Kali Linux Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 Github Git@OSC 目录: 第一章 安装和启动Kali ...
- node js学习(二)——REPL(交互式解释器)
1.简介 Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输 ...