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的更多相关文章

  1. pl/sql tutorial

    http://plsql-tutorial.com/plsql-procedures.htm What is PL/SQL? PL/SQL stands for Procedural Language ...

  2. SQL with PL/SQL

    DDL commands --> create user / table / view / sequence alter DML --> data manipulation languag ...

  3. Oracle PL/SQL Articles

    我是搬运工....http://www.oracle-base.com/articles/plsql/articles-plsql.php Oracle 8i Oracle 9i Oracle 10g ...

  4. Using PL/SQL APIs as Web Services

    Overview Oracle E-Business Suite Integrated SOA Gateway allows you to use PL/SQL application program ...

  5. postgreSQL PL/SQL编程学习笔记(二)

    Control Structures of PL/SQL Control structures are probably the most useful (and important) part of ...

  6. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  7. PL/SQL异常处理方法

    PL/SQL异常处理方法   1:什么是异常处理: PL/SQL提供一个功能去处理异常,在PL/SQL块中叫做异常处理,使用异常处理我们能够测试代码和避免异常退出. PL/SQL异常信息包含三个部分: ...

  8. 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. ...

  9. win7 64位系统 Oracle32bit + PL/SQL访问Orale服务,Oracle 11g的安装,中文乱码问题的解决

    前几天装了个Oracle32bit客户端 + PL/SQL连接不上oracle,我安装完打开PL/SQL登录界面跟正常的界面不一样,没有那个连接为Normal.SYSDBA的选项,下面有解释,至于我为 ...

随机推荐

  1. The Genymotion Virtual device could not obtain an IP address解决办法

    打开Genymotion运行虚拟机提示如下错误: The Genymotion Virtual device could not obtain an IP address.For an unknown ...

  2. OC中的内存管理

    一. 基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需 ...

  3. 【Android】神奇的android:clipChildren属性

    前言 前几天有在微博上推荐过一个博客,看他文章时发现了这个属性.有些属性不常用,但需要的时候非常有用,于是做了个例子,正好项目用到,与大家分享一下. 声明 欢迎转载,请注明出处! 博客园:http:/ ...

  4. windows svn 上传后 自动部署 到web目录下

    第一步 把web目录设置为工作目录 "D:\Program Files (x86)\VisualSVN Server\bin\svn.exe" upgrade "D:\y ...

  5. 转:查看sql语句执行时间/测试sql语句性能

    原文出处:http://www.cnblogs.com/qanholas/archive/2011/05/06/2038543.html 写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务 ...

  6. #一周五# win10通用平台,无处不在的Xamarin,msbuild开源,MVP卢建晖的Asp.NET 5系列 (视频)

    又到周五,本周博主的大部分时间都花在深圳了.最近winhec的消息太多了,我只想补充一点,就是winhec时隔7年之后回归,大多数的媒体都还在沿用之前的“硬件工程大会(Hardware Enginee ...

  7. 对于Kindle的分析

    因为朋友的推荐,半年前开始接触Kindle,一直在使用Kindle读书.Kindle是亚马逊旗下的电子阅读app,可以在手机或平板电脑上下载使用.Kindle需要使用用户个人的亚马逊账号登陆,在亚马逊 ...

  8. JAVA 8 默认方法-Default Methods

    什么是默认方法-Default Methods 简单的说,就是可以在接口中定义一个已实现方法,且该接口的实现类不需要实现该方法: 如下示例: interface GreetingService { v ...

  9. Asp.net MVC的Model Binder工作流程以及扩展方法(1) - Custom Model Binder

    在Asp.net MVC中, Model Binder是生命周期中的一个非常重要的部分.搞清楚Model Binder的流程,能够帮助理解Model Binder的背后发生了什么.同时该系列文章会列举 ...

  10. spring 整合 ActiveMQ

    1.1     JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到 ...