很全的PLSQL常用基本语法

1.联合数组:
联合数组的语法如下:
type type_name is TABLE OF element_type[NOT NULL]
INDEX BY element_type;
table_name TYPE_NAME ;
示例:
declare
type last_name_type is TABLE OF https://www.360docs.net/doc/fe7120787.html,st_name%TYPE
INDEX BY BINARY_INTRGER
last_name_tab last_name_type;

2.嵌套表:
基本语法:
type type_name IS TABLE OF element_type [NOT NULL];
table_name TYPE_NAME;
示例:
declare
TYPE last_name_type IS TABLE OF https://www.360docs.net/doc/fe7120787.html,st_name%TYPE;
last_name_tab last_name_type :=last_name_type();

3.变长数组:
基本语法:
TYPE type_name IS {VARRY|VARYING ARRAY}(size_limit) OF
element_type [NOT NULL]
varray_name TYPE_NAME;
示例:
DECLARE
TYPE last_name IS VARRAY(10)OF https://www.360docs.net/doc/fe7120787.html,st_name%TYPE;
last_name_varray last_name;

4.多层集合:
基本语法:
varray_name(subscript of the outer varray)(subscript of the inner varray)
示例:
DECLARE
TYPE varray_type1 IS VARRAY(10)OF INTEGER;
TYPE varray_type2 IS VARRAY(5) OF varray_type1;
varary1 varray_type1 :=varray_type1(2,4,6,8);
varray2 type_type2 :=varray_type2(varray1);
BEGIN
DBMS.OUTPUT_LINE('varray of integers');
FOR i IN 1..4 LOOP
DBMS.OUTPUT_LINE('varray1('||i||'):||varray1(1));
END LOOP;
varray2.EXTEND;
varray2(2):=varray_type1(1,3,5,7);
FOR i IN 1..3 LOOP
FOR j IN 1..4 LOOP
DBMS.OUTPUT_LINE
('varray2('||i||')('||j||'):= ||varray2(i)(j);
END LOOP;
END LOOP;
END

5.IF 语句:
基本语法:
IF CONDITION THEN
statement 1;
....
statement n;
END IF;

6.IF-THEN -ELSE 语句:
基本语法:
IF CONDITION THEN
statement 1;
ELSE
statement 2;
END IF
statement 3;

7.ELSIF 语句
基本语法:
IF CONDITION 1 THEN
statement 1;
ELSIF CONDITION 2 THEN
statement 2 ;
ELSIF CONDITION 3 THEN
statement 3;
.......
ELSE
statement N;
END IF;

8.CASE 语句:
基本语法:
CASE SELETOR
WHEN EXPESSION 1 THEN STATEMENT 1;
WHEN EXPESSION 2 THEN STATEMENT 2;
........
WHEN EXPESSION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;

9.搜索式CASE:
基本语法:搜索式CASE语句有个产生布尔值的搜索条件.
CASE
WHEN SEARCH CONDITION 1 THEN STATEMENT 1;
WHEN SEARCH CONDITION 1 THEN STATEMENT 2;
.......
WHEN SEARCH CONDITION 1 THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;

10.NULLIF 和 COALESCE 函数:
1) NULLIF 函数:
NULLIF 函数会比较两个表达式,如果两者相同,返回一个NULL,否则返回一个表达式的值。
NULLIF(expression1,expression2)
2) COALESCE 函数
COALESCE 函数会把表达式列表中的每个表达式与NULL比较,并返回第一个非NULL表达式的值。
COALESCE(expression1,expression2,....,expressionN);
等价于:NVL(expression1,NVL(expression2,NVL(expression3,.

..)))

11.EXIT语句:
基本语法:
LOOP
statement1;
statement2;
IF CONDITION THEN
EXIT;
END IF ;
END LOOP;
statement3;

12. EXIT WHEN 语句:
基本语法:
LOOP
statement 1;
statement 2;
EXIT WHEN condition ;
END lOOP;
statement3;

13.WHILE 循环:
基本语法:
WHILE CONDITION LOOP
statement 1 ;
statement 2;
......
statement N;
END LOOP;

14.WHILE 中提前中止:
基本语法:
WHILE CONDITION LOOP
statement 1;
statement 2;
EXIT WHEN CONDITION ;
END LOOP;
statement3;

15.数值型FOR循环:
基本语法:
FOR loop_counter IN [REVERSE] lower_limit ..upper_limit LOOP
statement 1;
statement 2;
.....
statement N;
END LOOP;

16.CONTINUE 语句
基本语法:
LOOP
statement 1;
statement 2;
IF CONTINUE_CONDITION THEN(CONTINUE WHEN CONTINUE_CONDITION)
CONTINUE;
END IF;
EXIT WHEN EXIT_CINDITION;
END LOOP;
statement3;

17.RAISE_APPLICATION_ERROR
基本语法:RAISE_APPLICATION_ERROR 是Oracle 提供的一种特殊的内置过程,允许开发人员
为特定的程序创建有意义的错误消息,适用于用户定义异常。
RAISE_APPLICATION_ERROR(error_number,error_message)||
RAISE_APPLICATION_ERROR(error_number,error_message,keep_errors);

18.游标
1)显示游标处理步骤:
a) 声明游标:建立游标初始化环境;
b) 打开游标:打开被声明的游标,并分配内存;
c) 检索信息: 从打开的游标中检索信息;
d) 关闭游标: 关闭检索后的游标,释放所分配的内存;
2)声明游标:
CURSOR c_cursor_name IS select statement
示例:
DECLARE
CRUSOR c_mycursor IS
SELECT * FROM zipcode WHERE state= 'NY';
3)记录类型:
为创建一个基于表或者基本游标的记录,可以用 %ROWTYPE 属性;
record_name table_name or cursor_name%ROWTYPE
4)打开游标
OPEN cursor_name;
5)检索信息:
FETCH cursor_name INTO PL/SQL variables;
或者
FETCH cursor_name INTO PL/SQL record;
6)关闭游标:
CLOSE curosr_name;
7)声明一个记录类型:
TYPE type_name IS RECORD
( field_name 1 DATATYPE 1;
field_name 2 DATATYPE 2;
.......
field_name N DATATYPE N;
);
record_name TYPE_NAME%ROWTYPE;

8)游标属性:
%NOTFOUND cursor_name%NOTFOUNT 当前面的FETCH操作没有返回数据行时,属性值是TRUE;
%FOUND cursor_name%FOUNT 当前面FETCH操作返回一行数据时,属性值为TRUE;
$ROWCOUNT cursor_name%ROWCOUNT 从游标中所检索的记录改数量;
$ISOPEN cursor_name%ISOPEN 当游标处于打开状态时,属性值为TRUE;

9)使用游标FOR循环:
借助于游标FOR循环,游标打开、检索、关闭的过程被隐含地实现。
示例:
DECLARE
CURSOR c_student IS
SELECT student_id ,last_name ,first_name
FROM

student WHERE student_id<100;
BEGIN
FOR r_student IN c_student
LOOP
INSERT INTO table_log
VALUES (r_https://www.360docs.net/doc/fe7120787.html,st_name);
END LOOP;
END;

10) FOR UPDATE 和 WHERE CURRENT游标
基本语法:
FOR_UPDATE OF
示例:
DECLARE
CURSOR c_course IS
SELECT course_no,cost
FROM course FOR UPDATE ;
BEGIN
FOR r_course IN c_cursor
LOOP
IF r_course _cost<2500
THEN
UPDATE course
SET cost = r_course.cost + 10
WHERE COURSE_NO =r_course.course_no;
END IF;
END LOOP;
END;

FOR_CURRENT OF 可以和 FOR_UPDATE_OF 一起使用,免于在UPDATE 语句中添加对应的 WHERE 条件,
因为更新操作作只针对游标的录前记录。

19.解发器
1)基本通用语句:
CREATE [OR REPLACE] TRIGGER Ttragger_name
{BEFORE|AFTER}Trigger_event ON table_name
[FOR EACH ROW]
[FOLLOWS another_trigger]
[ENABLE|DISABLE]
[WHEN CONDITION]
DECLARE
declation statements
BEGIN
executable statements
EXCEPTION
exception-handling statements
END;
2)自治事务:
自治事务是由其它事务发起的独立事务。也就是说,自治事务也许会执行多个DML语句,并且提交或者回滚操作,
而不会提交或者回滚主事各执行的DML语句。
为定义一个自治事务,需要使用AUTONOMOUS_TRANSACTION编绎指令。即使用其的方法为:
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION ;

20.记录
1)记录类型
a)基于表和基于游标的记录
使用%ROWTYPE 属性,可以创建基于表和基于游标的事记录。这个属性类似于用于定义标量的%TYPE
b)用户自己定义的游标
创建用户自己定义记录的通用语法如下:
TYPE type_name IS RECORD
(field_name1 datatype1 [NOT NULL] [:= DEFAULT EXPRESSION],
field_name2 datatype2 [NOT NULL] [:= DEFAULT EXPRESSION],
.....
field_nameN datatypeN [NOT NULL] [:=DEFAULT EXPRESSION]);
record_name TYPE_NAME;
2)嵌套记录
一些记录中包含其它记录和集合
示例:
DECLARE
TYPE name_type IS RECORD
{ first_name VARCHAR2(20),
last_name VARCHAR2(20));
TYPE person_type is
{ name name_type,
street VARCHAR2(50),
city VARCHAR2(20),
zip VARCHAR2(20));

person_rec preson_type;
END;

21.过程
1)创建过程:
CREATE OR REPLACE PROCEDURE name
[(parameter[,parameter,....)]
AS
[local declarations]
BEGIN
executable statementss
[EXCEPTION
execption handlers]
END [name];
2)过程传入和传出参数
IN 给程序传值 用法:只读的值
OUT 从程序返回的值,必须是变量 用法:只写的值
IN OUT 传入值,也从程序返回 用法:必须是变量

22.函数
基本语法:
CREATE [OR REPLACE] FUNCTION function_name
(parameter list)
RETURN datatype
IS
BEGIN

RE

TRUN (return_value);
END;



相关主题
相关文档
最新文档