ORACLE PL/SQL

(1).PL/SQL对大小写不是敏感的。
(2).字符类型:
 CHAR:最大程度32767。
(3).快格式:
 BEGIN
  DECLARE
  BEGIN
  EXCEPTION
  END
 END
   注:要是用了第一个BENGIN就一定要用第二个,反之亦然。
(4)注释方法:
 单行--This is a one-line comment
 多行/*This is
       is a
       one-line comment
    */
(5)PL/SQL可以直接支持DML语言查询,却不支持DDL命令,你通常会使用PL/SQL维护在数据库结构中的数据。但并不能维护这些结构。
(6)DECLARE
   customer char(30);
   fiscal_year number(2) NOT NULL:='97';
   每一个变量的定义都必须以分号结束。
(7)声明指针
   DECLARE
 cursor employee_cursor is
   select * from employees;
   指针与视图类似,通过在PROCDURE部分使用LOOP(循环)。你可以翻阅指针。
(8)%TYPE属性
 %TYPE可以放回表中给定的变量属性。
 DECLARE
 cursor employee_cursor is
 select emp_id, emp_name from employees;
 id_num employees.emp_id%TYPE;
 name employees.emp_name%TYPE;
(9)%ROWTYPE 属性
变量不仅限于单一的数值,如果你所定义的变量与一个指针相关联的话,你可以使用
%ROWTYPE 属性来声明变量与保证它与游标所在行的类型相同.在ORACLE 的词典中
%ROWTYPE

DECLARE
cursor employee_cursor is
select emp_id, emp_name from employees;
employee_record employee_cursor%ROWTYPE;

分析:
在上例中定义了一个叫employee_record 的变量,%ROWTYPE 定义了这个变量的使它
与employee_cursor 所在行的数据类型相同这个%ROWTYPE 属性定义的变量也称为集合
变量.
%ROWCOUNT 属性
在PL/SQL 中%ROWCOUNT 属性可以保证在特定的SQL 语句块中的游标行数
DECLARE
cursor employee_cursor is
select emp_id, emp_name from employees;
records_processed := employee_cursor%ROWCOUNT;

在上例中变量records_processed 将会返回PL/SQL 语句所访问的employee_cursor 的行

警告:在定义变量的时候要小心以访止它和表的名字相冲突,例如:如果你定义的变量与
你的PL/SQL 语句块中所访问的表的名字是相同的,那么变量的名字会优先于表的名字
Procdure 部分
PROCDURE 部分是一个块的主要部分,它包括条件语句和SQL
语句
BEGIN
open a cursor;
condition1;
statement1;
condition2;
statement2;
condition3;
statement3;
...
close the cursor;
END

指针控制命令
现在你将学习如何在PL/SQL 的语句块中定义一个指针你需要知道如何来访问一个
定义过的指针这一部分诠释了基本的指针控制命令DECLARE OPEN FETCH 和
CLOSE

条件语句
IF condition1 THEN
statement1;
END IF;

IF condition1 THEN
statement1;
ELSE
statement2;
END IF;


IF condition1 THEN
statement1;
ELSIF condition2 THEN
statement2;
ELSE
statement3;
END IF;


LOOPS 循环
LOOP
WHILE-LOOP
FOR-LOOP

BEGIN
open employee_cursor;
LOOP
FETCH employee_cursor into employee_record;
EXIT WHEN employee_cursor%NOTFOUND;
statement1;
....
END LOOP;
close employee_cursor;
END;


DECLARE
cursor payment_cursor is
select cust_id, payment, total_due from payment_table;
cust_id payment_table.cust_id%TYPE;
payment payment_table.payment%TYPE;
total_due payment_table.total_due%TYPE;
BEGIN
open payment_cursor;
WHILE payment < total_due LOOP
FETCH payment_cursor into cust_id, payment, total_due;
EXIT WHEN payment_cursor%NOTFOUND;
insert into underpay_table
values (cust_id, 'STILL OWES');
END LOOP;
close payment_cursor;


DECLARE
cursor payment_cursor is
select cust_id, payment, total_due from payment_table;
cust_id payment_table.cust_id%TYPE;
payment payment_table.payment%TYPE
total_due payment_table.total_due%TYPE;
BEGIN
open payment_cursor;
FOR pay_rec IN payment_cursor LOOP
IF pay_rec.payment < pay_rec.total_due THEN
insert into underpay_table
values (pay_rec.cust_id, 'STILL OWES');
END IF;
END LOOP;
close payment_cursor;
END;

 

EXCEPTION 部分

激活EXCEPTION (异常):RIASE

BEGIN
DECLARE
exception_name EXCEPTION;
BEGIN
IF condition THEN
RAISE exception_name;
END IF;
EXCEPTION
WHEN exception_name THEN
Statement;
END;
END;
异常的处理
EXCEPTION
WHEN exception1 THEN
statement1;
WHEN exception2 THEN
statement2;
WHEN OTHERS THEN
statement3;


SQL*PLUS

posted @ 2008-12-24 14:59  chunchill  阅读(255)  评论(0编辑  收藏  举报