——使用复合数据类型
1.PL/SQL记录(Record)以及%ROWTYPE属性
declare
type x is record(
ename emp.ename%type,
salary emp.sal%type,
dno emp.deptno%type);
xx x;
begin
select ename,sal,deptno into xx from emp where empno=&no;
dbms_output.put_line(xx.ename);
end;
--------rowtype 完全匹配表中的列
declare
a dept%rowtype;
begin
a.deptno:=11;
a.dname:='UUUUUUU';
a.loc:='BEIJING';
insert into dept values (a.deptno,a.dname,a.loc);
end;
2.索引表(INDEX)、嵌套表、和变长数组(VARRAY)
--------索引表
type type_name is table of element_type
[not null] index by key_type;
identifier type_name;
--------嵌套表
type type_name is table of element_type;
identifier type_name;
--------变长数组
type type_name is varray(size_limit) of element_type[not null];
identifier type_name;
3.使用记录表可以有效的处理多行多列的数据
declare
type x is table of emp%rowtype index by binary_integer;
xx x;
begin
select * into xx(2) from emp where empno=&no;
dbms_output.put_line('雇员姓名:'||xx(2).ename);
dbms_output.put_line('雇员工资:'||xx(2).sal);
end;
4.集合方法
- EXISTS
- COUNT
- LIMIT
- FIRST/LAST
- PRIOR/NEXT
- EXTEND
- TRIM
- DELETE
- INDICES OF
- VALUE OF
- BULK COLLECT
————使用游标
1.使用显示游标以及游标属性
declare
cursor emp_cursor is select ename,sal from emp where deptno=10;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open emp_cursor;
loop
fetch emp_cursor into v_ename,v_sal;
exit when emp_cursor%notfound;
dbms_output.put_line(v_ename||':'||v_sal);
end loop;
close emp_cursor;
end;
- %ISOPEN
- %FOUND
- %NOTFOUND
- %ROWCOUNT
2.参数游标
定义参数游标时,需要指定参数名及其数据类型
3.显示游标更新或删除数据
同过游标更新或删除数据,在定义游标时必须带有FOR UPDATE
4.for循环
----FOR循环中直接使用子查询
begin
for emp_record in
(select ename,sal from emp)loop
dbms_output.put_line(emp_record.ename);
end loop;
end;
5.游标变量
必须首先定义REF CURSOR类型,才能定义游标变量。return 子句可以不定义
6.FETCH..BULK COLLECT INTO 语句和CURSOR表达式
————开发子程序
1.建立和调用过程
- CREATE PROCEDURE [IN OUT IN OUT]
- EXECUTE/CALL
位置传递 名称传递 组合传递
2.建立和调用函数
必须使用RETURN 子句。其他跟过程类似
3.管理PL/SQL子程序
- USER_OBJECTS
- USER_SOURCE
- SHOW ERRORS
————开发包
1.建立包规范和包体
关键字PACKAGE/ PACKAGE BODY
2.在包内定义公用组件和私有组件
- 公用组件在包头定义私有的在包体定义
- 不同作用域可以重复赋值
- 公有变量不能重复定义,私有在过程中可以重复定义
- 包的内部可以定游标类型,但不能定义游标变量。可以定义静态游标
---当使用其他用户身份调用公用组件时,必须在组件名前加用户名和包名作为前缀
----SCOTT.EMP_PACKAGE.。。。。
----当调用远程数据库包的公用组件是,在组件名前加包名作为前缀在组件名后需要带有数据库链名作为后缀
----EMP_PACKAGE.ADD_EMPLOYEE@TENDER(1111,'SCOTT',1233,10)
3.使用重载
多个具有相同名称的子程序。以java中重载相似但是返回类型必须相同
4.建立构造过程
初始化包的全局变量
5.纯度级别
-----纯度级别
---WNDS用于限制函数不能修改数据库数据
--- WNPS 用于限制函数不能修改包变量
--- RNDS 用于限制函数不能读取数据库数据
--- RNPS 用于限制函数不能读取包变量