- 浏览: 263147 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
cuiqi4016:
正在做json转换的功能,帮大忙了,感谢博主分享
java 通过反射获取泛型的类型 -
cxshun:
写得很好,感谢博主的分享
java 通过反射获取泛型的类型 -
joy3229233:
[url][/url][flash=200,200][/fla ...
(转)flex checkbox 选中 -
linkagebest:
盗版可耻。。。。。
(转)flex checkbox 选中 -
shuai0420:
...
flex数据绑定
PL/SQL存储过程编程(上)
1. Oracle应用编辑方法概览
答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用;
2) ODBC
3) OCI: C语言和数据库打交道的方法,和ProC很相似,更底层,很少用;
4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多;
5) JDBC
6) PL/SQL: 存储在数据内运行, 其他方法为在数据库外对数据库访问;
2. PL/SQL
答:1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言;
2) Oracle客户端工具访问Oracle服务器的操作语言;
3) Oracle对SQL的扩充;
4. PL/SQL的优缺点
答:优点:
1) 结构化模块化编程,不是面向对象;
2) 良好的可移植性(不管Oracle运行在何种操作系统);
3) 良好的可维护性(编译通过后存储在数据库里);
4) 提升系统性能;
缺点
1) 不便于向异构数据库移植应用程序(只能用于Oracle);
5. SQL与PL/SQL的区别
答:SQL:1) 第四代语言(智能语言);
2) 做什么,不管怎么做;
3) 缺少过程与控制语句;
4) 无算法
PL/SQL: 1) 扩展变量和类型;
2) 扩展控制结构;
3) 扩展过程与函数;
4) 扩展对象类型与方法
第二章
PL/SQL程序结构
1. PL/SQL块
答:1) 申明部分, DECLARE(不可少);
2) 执行部分, BEGIN...END;
3) 异常处理,EXCEPTION(可以没有);
2. PL/SQL开发环境
答:可以运用任何纯文本的编辑器编辑,例如:VI
3. PL/SQL字符集
答:PL/SQL对大小写不敏感
4. 标识符命名规则
答:1) 字母开头;
2) 后跟任意的非空格字符、数字、货币符号、下划线、或# ;
3) 最大长度为30个字符(八个字符左右最合适);
5. 变量声明
答:语法
Var_name type [CONSTANT][NOT NULL][:=value];
注:1) 申明时可以有默认值也可以没有;
2) 如有[CONSTANT][NOT NULL], 变量一定要有一个初始值;
3) 赋值语句为“:=”;
4) 变量可以认为是数据库里一个字段;
5) 规定没有初始化的变量为NULL;
第三章
1. 数据类型
答:1) 标量型:数字型、字符型、布尔型、日期型;
2) 组合型:RECORD(常用)、TABLE(常用)、VARRAY(较少用)
3) 参考型:REF CURSOR(游标)、REF object_type
4) LOB(Large Object)
2. %TYPE
答:变量具有与数据库的表中某一字段相同的类型
例:v_FirstName studengts.first_name%TYPE;
3. RECORD类型
答:TYPE record_name IS RECORD( /*其中TYPE,IS,RECORD为关键字,record_name为变量名称*/
field1 type [NOT NULL][:=expr1], /*每个等价的成员间用逗号分隔*/
field2 type [NOT NULL][:=expr2], /*如果一个字段限定NOT NULL,那么它必须拥有一个初始值*/
... /*所有没有初始化的字段都会初始为NULL
fieldn type [NOT NULL][:=exprn]);
4. %ROWTYPE
答:返回一个基于数据库定义的类型
DECLARE
v_StuRec Student%ROWTYPE; /*Student为表的名字*/
注:与3中定一个record相比,一步就完成,而3中定义分二步:a. 所有的成员变量都要申明; b. 实例化变量;
5. TABLE类型
答:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;
例:DECLARE
TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER;
v_Student t_StuTable;
BEGIN
SELECT * INTO v_Student(100) FROM Student WHERE id = 1001;
END;
注:1) 行的数目的限制由BINARY_INTEGER的范围决定;
6. 变量的作用域和可见性
答:1) 执行块里可以嵌入执行块;
2) 里层执行块的变量对外层不可见;
3) 里层执行块对外层执行块变量的修改会影响外层块变量的值;
第四章
1. 条件语句
答:IF boolean_expression1 THEN
...
ELSIF boolean_expression2 THEN /*注意是ELSIF,而不是ELSEIF*/
... /*ELSE语句不是必须的,但END IF;是必须的*/
ELSE
...
END IF;
2. 循环语句
答:1) Loop
...
IF boolean_expr THEN /* */
EXIT; /* EXIT WHEN boolean_expr */
END IF; /* */
END LOOP;
2) WHILE boolean_expr LOOP
...
END LOOP;
3) FOR loop_counter IN [REVERSE] low_blound..high_bound LOOP
...
END LOOP;
注:a. 加上REVERSE 表示递减,从结束边界到起始边界,递减步长为一;
b. low_blound 起始边界; high_bound 结束边界;
3. GOTO语句
答:GOTO label_name;
1) 只能由内部块跳往外部块;
2) 设置标签:<<label_name>>
3) 示例:
LOOP
...
IF D%ROWCOUNT = 50 THEN
GOTO l_close;
END IF;
...
END LOOP;
<<l_close>>;
...
4. NULL语句
答:在语句块中加空语句,用于补充语句的完整性。示例:
IF boolean_expr THEN
...
ELSE
NULL;
END IF;
5. SQL in PL/SQL
答:1) 只有DML SQL可以直接在PL/SQL中使用;
第五章
1. 游标(CURSOR)
答:1) 作用:用于提取多行数据集;
2) 声明:a. 普通申明:DELCARE CURSOR CURSOR_NAME IS select_statement /* CURSOR的内容必须是一条查询语句*/
b. 带参数申明:DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id;
3) 打开游标:OPEN Cursor_name; /*相当于执行select语句,且把执行结果存入CURSOR;
4) 从游标中取数:a. FETCH cursor_name INTO var1, var2, ...; /*变量的数量、类型、顺序要和Table中字段一致;*/
b. FETCH cursor_name INTO record_var;
注:将值从CURSOR取出放入变量中,每FETCH一次取一条记录;
5) 关闭游标: CLOSE Cursor_name;
注:a. 游标使用后应该关闭;
b. 关闭后的游标不能FETCH和再次CLOSE;
c. 关闭游标相当于将内存中CURSOR的内容清空;
2. 游标的属性
答:1) %FOUND: 是否有值;
2) %NOTFOUND: 是否没有值;
3) %ISOPEN: 是否是打开状态;
4) %ROWCOUNT: CURSOR当前的记录号;
3. 游标的FETCH循环
答:1) LOOP
FETCH cursor INTO ...
EXIT WHEN cursor%NOTFOUND; /*当cursor中没记录后退出*/
END LOOP;
2) WHILE cursor%FOUND LOOP
FETCH cursor INTO ...
END LOOP;
3) FOR var IN cursor LOOP
FETCH cursor INTO...
END LOOP;
第六章
1. 异常
答:DECLARE
...
e_TooManyStudents EXCEPTION; /* 申明异常 */
...
BEGIN
...
RAISE e_TooManyStudents; /* 触发异常 */
...
EXCEPTION
WHEN e_TooManyStudents THEN /* 触发异常 */
...
WHEN OTHERS THEN /* 处理所有其他异常 */
...
END;
PL/SQL存储过程编程(下)
1. 存储过程(PROCEDURE)
答:创建过程:
CREATE [OR REPLACE] PROCEDURE proc_name
[(arg_name[{IN|OUT|IN OUT}]TYPE,
arg_name[{IN|OUT|IN OUT}]TYPE)]
{IS|AS}
procedure_body
1) IN: 表示该参数不能被赋值(只能位于等号右边);
2) OUT:表示该参数只能被赋值(只能位于等号左边);
3) IN OUT: 表示该类型既能被赋值也能传值;
2. 存储过程例子
答:CREATE OR REPLACE PROCEDURE ModeTest(
p_InParm IN NUMBER,
p_OutParm OUT NUMBER,
p_InOutParm IN OUT NUMBER)
IS
v_LocalVar NUMBER; /* 声明部分 */
BEGIN
v_LocalVar:=p_InParm; /* 执行部分 */
p_OutParm:=7;
p_InOutParm:=7;
...
EXCEPTION
... /* 异常处理部分 */
END ModeTest;
3. 调用PROCEDURE的例子
答: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) 三个语句(INSERT/UPDATE/DELETE);
2) 二种类型(之前/之后);
3) 二种级别(row-level/statement-level);
所以一共有 3 X 2 X 2 = 12
4. 触发器的限制
答:1) 不应该使用事务控制语句;
2) 不能声明任何LONG或LONG RAW变量;
3) 可以访问的表有限。
5. 触发器的主体可以访问的表
答:1) 不可以读取或修改任何变化表(被DML语句正在修改的表);
2) 不可以读取或修改限制表(带有约束的表)的主键、唯一值、外键列。
1. Oracle应用编辑方法概览
答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用;
2) ODBC
3) OCI: C语言和数据库打交道的方法,和ProC很相似,更底层,很少用;
4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多;
5) JDBC
6) PL/SQL: 存储在数据内运行, 其他方法为在数据库外对数据库访问;
2. PL/SQL
答:1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言;
2) Oracle客户端工具访问Oracle服务器的操作语言;
3) Oracle对SQL的扩充;
4. PL/SQL的优缺点
答:优点:
1) 结构化模块化编程,不是面向对象;
2) 良好的可移植性(不管Oracle运行在何种操作系统);
3) 良好的可维护性(编译通过后存储在数据库里);
4) 提升系统性能;
缺点
1) 不便于向异构数据库移植应用程序(只能用于Oracle);
5. SQL与PL/SQL的区别
答:SQL:1) 第四代语言(智能语言);
2) 做什么,不管怎么做;
3) 缺少过程与控制语句;
4) 无算法
PL/SQL: 1) 扩展变量和类型;
2) 扩展控制结构;
3) 扩展过程与函数;
4) 扩展对象类型与方法
第二章
PL/SQL程序结构
1. PL/SQL块
答:1) 申明部分, DECLARE(不可少);
2) 执行部分, BEGIN...END;
3) 异常处理,EXCEPTION(可以没有);
2. PL/SQL开发环境
答:可以运用任何纯文本的编辑器编辑,例如:VI
3. PL/SQL字符集
答:PL/SQL对大小写不敏感
4. 标识符命名规则
答:1) 字母开头;
2) 后跟任意的非空格字符、数字、货币符号、下划线、或# ;
3) 最大长度为30个字符(八个字符左右最合适);
5. 变量声明
答:语法
Var_name type [CONSTANT][NOT NULL][:=value];
注:1) 申明时可以有默认值也可以没有;
2) 如有[CONSTANT][NOT NULL], 变量一定要有一个初始值;
3) 赋值语句为“:=”;
4) 变量可以认为是数据库里一个字段;
5) 规定没有初始化的变量为NULL;
第三章
1. 数据类型
答:1) 标量型:数字型、字符型、布尔型、日期型;
2) 组合型:RECORD(常用)、TABLE(常用)、VARRAY(较少用)
3) 参考型:REF CURSOR(游标)、REF object_type
4) LOB(Large Object)
2. %TYPE
答:变量具有与数据库的表中某一字段相同的类型
例:v_FirstName studengts.first_name%TYPE;
3. RECORD类型
答:TYPE record_name IS RECORD( /*其中TYPE,IS,RECORD为关键字,record_name为变量名称*/
field1 type [NOT NULL][:=expr1], /*每个等价的成员间用逗号分隔*/
field2 type [NOT NULL][:=expr2], /*如果一个字段限定NOT NULL,那么它必须拥有一个初始值*/
... /*所有没有初始化的字段都会初始为NULL
fieldn type [NOT NULL][:=exprn]);
4. %ROWTYPE
答:返回一个基于数据库定义的类型
DECLARE
v_StuRec Student%ROWTYPE; /*Student为表的名字*/
注:与3中定一个record相比,一步就完成,而3中定义分二步:a. 所有的成员变量都要申明; b. 实例化变量;
5. TABLE类型
答:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;
例:DECLARE
TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER;
v_Student t_StuTable;
BEGIN
SELECT * INTO v_Student(100) FROM Student WHERE id = 1001;
END;
注:1) 行的数目的限制由BINARY_INTEGER的范围决定;
6. 变量的作用域和可见性
答:1) 执行块里可以嵌入执行块;
2) 里层执行块的变量对外层不可见;
3) 里层执行块对外层执行块变量的修改会影响外层块变量的值;
第四章
1. 条件语句
答:IF boolean_expression1 THEN
...
ELSIF boolean_expression2 THEN /*注意是ELSIF,而不是ELSEIF*/
... /*ELSE语句不是必须的,但END IF;是必须的*/
ELSE
...
END IF;
2. 循环语句
答:1) Loop
...
IF boolean_expr THEN /* */
EXIT; /* EXIT WHEN boolean_expr */
END IF; /* */
END LOOP;
2) WHILE boolean_expr LOOP
...
END LOOP;
3) FOR loop_counter IN [REVERSE] low_blound..high_bound LOOP
...
END LOOP;
注:a. 加上REVERSE 表示递减,从结束边界到起始边界,递减步长为一;
b. low_blound 起始边界; high_bound 结束边界;
3. GOTO语句
答:GOTO label_name;
1) 只能由内部块跳往外部块;
2) 设置标签:<<label_name>>
3) 示例:
LOOP
...
IF D%ROWCOUNT = 50 THEN
GOTO l_close;
END IF;
...
END LOOP;
<<l_close>>;
...
4. NULL语句
答:在语句块中加空语句,用于补充语句的完整性。示例:
IF boolean_expr THEN
...
ELSE
NULL;
END IF;
5. SQL in PL/SQL
答:1) 只有DML SQL可以直接在PL/SQL中使用;
第五章
1. 游标(CURSOR)
答:1) 作用:用于提取多行数据集;
2) 声明:a. 普通申明:DELCARE CURSOR CURSOR_NAME IS select_statement /* CURSOR的内容必须是一条查询语句*/
b. 带参数申明:DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id;
3) 打开游标:OPEN Cursor_name; /*相当于执行select语句,且把执行结果存入CURSOR;
4) 从游标中取数:a. FETCH cursor_name INTO var1, var2, ...; /*变量的数量、类型、顺序要和Table中字段一致;*/
b. FETCH cursor_name INTO record_var;
注:将值从CURSOR取出放入变量中,每FETCH一次取一条记录;
5) 关闭游标: CLOSE Cursor_name;
注:a. 游标使用后应该关闭;
b. 关闭后的游标不能FETCH和再次CLOSE;
c. 关闭游标相当于将内存中CURSOR的内容清空;
2. 游标的属性
答:1) %FOUND: 是否有值;
2) %NOTFOUND: 是否没有值;
3) %ISOPEN: 是否是打开状态;
4) %ROWCOUNT: CURSOR当前的记录号;
3. 游标的FETCH循环
答:1) LOOP
FETCH cursor INTO ...
EXIT WHEN cursor%NOTFOUND; /*当cursor中没记录后退出*/
END LOOP;
2) WHILE cursor%FOUND LOOP
FETCH cursor INTO ...
END LOOP;
3) FOR var IN cursor LOOP
FETCH cursor INTO...
END LOOP;
第六章
1. 异常
答:DECLARE
...
e_TooManyStudents EXCEPTION; /* 申明异常 */
...
BEGIN
...
RAISE e_TooManyStudents; /* 触发异常 */
...
EXCEPTION
WHEN e_TooManyStudents THEN /* 触发异常 */
...
WHEN OTHERS THEN /* 处理所有其他异常 */
...
END;
PL/SQL存储过程编程(下)
1. 存储过程(PROCEDURE)
答:创建过程:
CREATE [OR REPLACE] PROCEDURE proc_name
[(arg_name[{IN|OUT|IN OUT}]TYPE,
arg_name[{IN|OUT|IN OUT}]TYPE)]
{IS|AS}
procedure_body
1) IN: 表示该参数不能被赋值(只能位于等号右边);
2) OUT:表示该参数只能被赋值(只能位于等号左边);
3) IN OUT: 表示该类型既能被赋值也能传值;
2. 存储过程例子
答:CREATE OR REPLACE PROCEDURE ModeTest(
p_InParm IN NUMBER,
p_OutParm OUT NUMBER,
p_InOutParm IN OUT NUMBER)
IS
v_LocalVar NUMBER; /* 声明部分 */
BEGIN
v_LocalVar:=p_InParm; /* 执行部分 */
p_OutParm:=7;
p_InOutParm:=7;
...
EXCEPTION
... /* 异常处理部分 */
END ModeTest;
3. 调用PROCEDURE的例子
答: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) 三个语句(INSERT/UPDATE/DELETE);
2) 二种类型(之前/之后);
3) 二种级别(row-level/statement-level);
所以一共有 3 X 2 X 2 = 12
4. 触发器的限制
答:1) 不应该使用事务控制语句;
2) 不能声明任何LONG或LONG RAW变量;
3) 可以访问的表有限。
5. 触发器的主体可以访问的表
答:1) 不可以读取或修改任何变化表(被DML语句正在修改的表);
2) 不可以读取或修改限制表(带有约束的表)的主键、唯一值、外键列。
发表评论
-
oracle 设置SGA
2013-03-14 11:12 1058SQL> show parameter sga; ... -
oracle sequence
2012-03-23 13:35 1010create or replace procedure p_c ... -
oracle 触发器
2012-03-23 13:11 1073触发器是指存放在数据库中,并被隐藏执行的存储过程。在Oracl ... -
两个经典的Oracle触发器示例 .
2012-03-23 11:48 1148【案例一】 题目: --触发器: --添加员工信息,流水号作 ... -
oracle sql 优化
2011-06-07 15:53 1225Oracle SQL的优化规则: 尽量少用IN操作符,基本 ... -
查看一个函数被哪些存储过程调用
2011-02-28 14:37 1542查看一个函数被哪些存储过程调用: select * from ... -
Oracle 常用SQL技巧
2010-11-24 17:44 8581. SELECT子句中避免使用 ... -
oracle 存储过程的基本语法
2010-11-05 15:59 10821.基本结构 CREATE OR REPLACE PROCE ... -
oracle存储过程,游标及循环应用实例
2010-07-21 14:45 1558最近在项目中做了一个关于系统与系统之间数据同步的业务,之前使用 ... -
oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询
2010-05-26 11:24 891今天发现在oracle中的select语句可以用START W ... -
ArcSDE系统表的说明
2010-02-01 17:09 1395当基于Oracle或是SQL Server安装ArcSde后, ... -
(转)Oracle常用数据字典的查询使用方法
2010-01-14 16:40 1007查看当前用户的缺省表空间 SQL>select use ... -
(转)hibernate中是否支持postgis函数的问题
2010-01-13 16:08 1782今天上午一位朋友问到了,关于hibernate中是否支持pos ... -
oracle 分页语句
2010-01-06 17:28 838select * from (select a.*, ro ... -
数据库设计5步骤
2009-12-23 16:43 813数据库设计5步骤 ... -
数据库设计
2009-12-23 10:07 899说到数据库,我认为不 ... -
oracle 优化
2009-11-25 15:36 960Oracle的优化器有两种优 ... -
oracle 字段类型
2009-11-13 16:49 1074Char 用于描述定长的字符型数据,长度<=2000字节 ... -
oracle PROCEDURE
2009-11-13 16:13 2991.基本结构 CREATE OR REPLACE PROCED ... -
通过一个实际的例子学习Oracle存储过程
2009-11-10 18:10 1501--创建存储过程 CREATE OR REPLACE PROC ...
相关推荐
### PL/SQL存储过程编程详解 #### 一、Oracle应用编辑方法概览 在Oracle数据库的应用开发中,存在多种编辑方法和技术,它们各有特点和适用场景。以下是对这些方法的概述: 1. **Pro*C/C++**: 这是一种C语言与...
Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...
### PL/SQL编程基础知识 #### 一、PL/SQL简介 PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...
1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...
客户端工具如SQL*Plus,以及其他高级开发环境和第三方工具(如PowerBuilder),均可以调用服务器端的PL/SQL存储过程和函数。 #### 六、总结 PL/SQL为Oracle数据库的开发人员提供了一个强大而灵活的工具集,不仅...
Oracle PL/SQL是一种...书中可能包含各种类型的PL/SQL程序设计技巧,从简单的存储过程和函数到复杂的事务处理和并发控制策略。通过实例学习,你将能够更好地理解和运用这些概念,提升你在Oracle数据库开发中的技能。
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库系统中用于数据库编程的一种扩展SQL语言。它结合了SQL的查询能力与过程化编程元素,使得开发者能够创建复杂的业务逻辑和数据库应用程序。PL/...
例如,在`jbpm.sql`文件中,可能包含了与业务流程管理(BPM)相关的PL/SQL存储过程或函数,用于定义和执行工作流任务。 此外,PL/SQL还支持块的概念,如匿名块,这使得在不创建独立的存储过程或函数的情况下,也能...
通过上述对Oracle 9i PL/SQL程序设计笔记的总结,我们可以看到PL/SQL作为一种强大的数据库编程语言,提供了丰富的功能来支持数据处理、事务控制及业务逻辑的实现。掌握PL/SQL的不同块类型及其使用方法对于开发高效、...
PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...
【PL/SQL编程】是Oracle数据库中用于数据库管理和应用程序开发的一种高级过程语言,它结合了SQL查询语言的威力和高级编程语言的灵活性。本章详细介绍了PL/SQL的基础知识,帮助初学者快速掌握该语言。 **4.1 PL/SQL...
1. **PL/SQL编程支持**:PL/SQL Developer内置了强大的PL/SQL编辑器,支持语法高亮、自动完成、错误检查等功能,使开发人员能够高效编写PL/SQL代码。此外,还具备代码折叠、查找替换、书签设置等实用功能,提高了...
- **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性。 - **环境搭建与配置**:...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...
PL/SQL Developer是一款由Allround Automations公司开发的专门用于Oracle数据库管理的集成开发环境(IDE)。这款软件为Oracle数据库管理员、开发人员和测试人员提供了便捷的SQL和PL/SQL编写、调试和执行功能。而“pl...
1. **PL/SQL基础**:介绍PL/SQL的基本语法,包括变量声明、常量定义、条件判断语句(IF-THEN-ELSIF-ELSE)、循环结构(WHILE、FOR)、异常处理(BEGIN-EXCEPTION-END)等,以及如何编写存储过程、函数和触发器。...