1,建立过程,不带任何参数
create or replace procedure out_teme
is
begin
dbms_output.put_line(systimestamp);
end;
使用execute 调用过程
exec out_time
sql>set serveroutput on
sql>exec out_time
2.为参数传递变量和数据
create or replace procedure add_dept(dno number,dname varchar2 default null loc varchar2 default null) is
begin
insert into dept value(dno,dname,loc);
commit;
exception
when dup_val_on_index then
raise_application_error(-20000,''部门号不能重复');
end;
sql>exec add_dept(50,'sales','new York');
sql>exec add)dept(60);
名称传递
指在调用子程序时指定参数名,并使用关联符号"=>"为其提供相应的数值或变量
sql>exe add_dept(dname=>'salas',dno=>50);
sql>exec add_dept(dno=>60);
组合传递
指在调用子过程时,同时使用位置传递和名称传递
sql>exec add_dept(50,loc=>'new york');
sql>exec add_dept(60,dname=>'sales',loc=>'new york');
函数
返回一个计算结果值的模块,与过程不同,对函数的调用只能是可执行语句的一部分
建立函数,不带任何参数
create or replace function get_user return varchar2 is v_user varchar2(100);
begin
select username into v_user from user_users;
return v_user;
end;
使用变量接收函数返回值
sql>var v1 varchar2(100);
sql>exec:v1:=get_user;
在sql语句中直接调用函数
sql>select get_user from dual;
使用dbms_output调用函数
sql>set serveroutput on
sql>exec dbms_output.put_line('当前数据库用户:'||get_user);
建立函数带有out参数
create or replace function get_info(name varchar2,title out varchar2)return varchar2 as
deptname dept.dname%type;
begin
selecdt A.job,b.dname into title,deptname from emp a,dept b where a.deptno =b.deptno
and upper(a.ename)=upper(name);
return deptname;
exception
when no_data_found then
raise_application_error(-20000,'该雇员不存在');
end;
调用该函数
sql>var job varchar2(20);
sql>var dname varchar2(20);
sql>exec :dname:=get_info('smith',:job);
包
把各种逻辑相关的类型,常量,变量,异常和子程序组合在一起的模式对象
包说明:用于定义包的公用组件,包括常量,变量游标,过程和函数等,定义 的公用组件不仅可以在馆内引用
而且可以由其他子程序引用
包体:包中所有代码的实现,可单独定义私有组件,包括变量,常量过程和函数等,但在印刷体中所定义 的私有组件只能在包体内使用
而不能由其他子程序引用
包初始化
create or replace package body emp_package is
function validate_deptno(v_deptno number) return boolean is v_temp int;
begin
...
end
触发器实例
create trigger trigger_student3
on s
for insert, update,delete
as
begin
raiserror('不得对数据表进行任何修改!',16,10)
end
游标实例
游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。 将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。 显示游标被用于处理返回多行数据的SELECT 语句,游标名通过CURSOR….IS 语句显示地赋给SELECT 语句。 在PL/SQL中处理显示游标所必需的四个步骤: 1)声明游标;CURSOR cursor_name IS select_statement 2)为查询打开游标;OPEN cursor_name FETCH cursor_name INTO list_of_variables; FETCH cursor_name INTO PL/SQL_record; 4)关闭游标。CLOSE cursor_name 注意:在声明游标时,select_statement不能包含INTO子句。当使用显示游标时,INTO子句是FETCH语句的一部分。 INTO curStudentNo,curStudentName FROM StudentRecord WHERE > 上述游标自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL变量curStudentNo,curStudentName中已经有了值。 (1)FOR循环游标 (常用的一种游标) declare |