在介绍这前先随便说点。
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
%type 为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了.
%rowtype如果一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表示表中各个列的变量要简洁得多,并且不容易遗漏、出错。这样会增加程序的可维护性。为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个表的结构及其数据类型时,就只能采用这种方法定义变量的数据类型。
一行记录可以保存从一个表或游标中查询到的整个数据行的各列数据。一行记录的各个列与表中一行的各个列有相同的名称和数据类型。
create or replace procedure Test
--有参数就在()内写,没有就不写()
(
id in number; --ID
)
is
cursor c_test is select id,name from t_user t where t.id =id ; --声明显式游标
c_t c_test%rowtype; --定义游标变量,该变量的类型为基于游标c_test的记录
begin
--for 循环
for c_t in c_test loop
dbms_output.put_line(c_t.id|| '-1-' || c_t.name);
end loop;
--while 循环
open c_test;--必须要明确的打开游标
fetch c_test into c_t;
while c_test%found loop
dbms_output.put_line(c_t.id|| '-3-' || c_t.name);
fetch c_test into c_t;
end loop;
close c_test; --必须要明确的关闭游标
--fetch 循环
open c_test;--必须要明确的打开游标
loop
fetch c_test
into c_t;
exit when c_test%notfound;
dbms_output.put_line(c_t.id|| '-2-' || c_t.name);
end loop;
close c_test; --必须要明确的关闭游标
end Test;