Oracle pl/sql简述(三)

2014-11-24 14:40:43 · 作者: · 浏览: 4
RE的例子
答:1) 匿名块可以调;
2) 其他PROCDEURE可以调用;
例:
DECLARE
v_var1 NUMBER;
BEGIN
ModeTest(12, v_var1, 10);
END;
注:此时v_var1等于7
4. 指定实参的模式
答:1) 位置标示法:调用时添入所有参数,实参与形参按顺序一一对应;
2) 名字标示法:调用时给出形参名字,并给出实参
ModeTest(p_InParm=>12, p_OutParm=>v_var1, p_Inout=>10);
注:a. 两种方法可以混用;
b. 混用时第一个参数必须通过位置来指定。
5. 函数(Function)与过程(Procedure)的区别
答:1) 过程调用本身是一个PL/SQL语句(可以在命令行中通过exec语句直接调用);
2) 函数调用是表达式的一部分;
6. 函数的声明
答:CREATE [OR REPLACE] PROCEDURE proc_name
[(arg_name[{IN|OUT|IN OUT}]TYPE,
arg_name[{IN|OUT|IN OUT}]TYPE)]
RETURN TYPE
{IS|AS}
procedure_body
注:1) 没有返回语句的函数将是一个错误;
7. 删除过程与函数
答:DROP PROCEDURE proc_name;
DROP FUNCTION func_name;
第八章
1. 包
答:1) 包是可以将相关对象存储在一起的PL/SQL的结构;
2) 包只能存储在数据库中,不能是本地的;
3) 包是一个带有名字的声明;
4) 相当于一个PL/SQL块的声明部分;
5) 在块的声明部分出现的任何东西都能出现在包中;
6) 包中可以包含过程、函数、游标与变量;
7) 可以从其他PL/SQL块中引用包,包提供了可用于PL/SQL的全局变量。
8) 包有包头和包主体,如包头中没有任何函数与过程,则包主体可以不需要。
2. 包头
答:1) 包头包含了有关包的内容的信息,包头不含任何过程的代码。
2) 语法:
CREATE [OR REPLACE] PACKAGE pack_name {IS|AS}
procedure_specification|function_specification|variable_declaration|type_definition|exception_declaration|cursor_declaration
END pack_name;
3) 示例:
CREATE OR REPLACE PACKAGE pak_test AS
PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE);
TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER;
END pak_test;
3. 包主体
答:1) 包主体是可选的,如包头中没有任何函数与过程,则包主体可以不需要。
2) 包主体与包头存放在不同的数据字典中。
3) 如包头编译不成功,包主体无法正确编译。
4) 包主体包含了所有在包头中声明的所有过程与函数的代码。
5) 示例:
CREATE OR REPLACE PACKAGE BODY pak_test AS
PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE) IS
BEGIN
...
END RemoveStudent;
TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER;
END pak_test;
4. 包的作用域
答:1) 在包外调用包中过程(需加包名):pak_test.AddStudent(100010, 'CS', 101);
2) 在包主体中可以直接使用包头中声明的对象和过程(不需加包名);
5. 包中子程序的重载
答:1) 同一个包中的过程与函数都可以重载;
2) 相同的过程或函数名字,但参数不同;
6. 包的初始化
答:1) 包存放在数据库中;
2) 在第一次被调用的时候,包从数据库中调入内存并被初始化;
3) 包中定义的所有变量都被分配内存;
4) 每个会话都将拥有自己的包内变量的副本。
第九章
1. 触发器
答:1) 触发器与过程/函数的相同点
a. 都是带有名字的执行块;
b. 都有声明、执行体和异常部分;
2) 触发器与过程/函数的不同点
a. 触发器必须存储在数据库中;
b. 触发器自动执行;
2. 创建触发器
答:1) 语法:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE|AFTER} triggering_event ON table_reference
[FOR EACH ROW [WHEN trigger_condition]]
trigger_body;
2) 范例:
CREATE OR REPLACE TRIGGER UpdateMajorStats AFTER INSERT OR DELETE OR UPDATE ON students
DECLARE
CURSOR c_Statistics IS
SELECT * FROM students GROUP BY major;
BEGIN
...
END Up;
3. 触发器
答:1) 三个语句(INSE