首先来看看存储过程的定义 使用关键字 procedure
create or replace procedure myproc( --可以有参数
id out number, 参数可以是in 传入类型 out 传出类型
name in varchar2:='world', 包含in 类型 可以设定默认值
name2 in out varchar2 default 'hello') in out 即可用于传入 也可以传出值
is
声明区
v_id number:=2;
v_name varchar2(10) default 'world';
v_name2 varchar2(20);
begin
执行体....
如果去调用其它存储过程可以使用 call 或 exec
call myproc(参数1,参数2,.......);
也可以指定传参
exec myproc( id=>v_id, name2=>v_name2, name=>v_name); 正如所看到的 指定传参 位置可以任意
end;
小知识: 在执行存储过程或创建时 如果出现错误可以使用命令 show error 或 show errors
如果存储过程己经创建成功 可以使用 desc 存储过程名 查看存储过程的详细参数信息
函数:
关键字使用 function 函数有返回值 执行块中必须返回 必须处理函数的返回值不可忽略
声明:
function myfunc( id in number:=1, name in varchar2 default 'hello' )
return number;
is
begin
函数执行体.............
return 100; 必须有返回
end myfunc;
调用和存储过程相同 创建了函数或存储过程后如果想删除可以使用
drop procedure 存储过程名;
drop function 函数名;
如果想查看创建好的存储过程或函数可以使用
select object_name,status from user_objects where object_name='MYPROC'; 注意系统表中均为大写
想查看存储过程或函数原代码可以使用
select text from user_source where name='MYPROC';
触发器:
触发器 每张表 最多建立12个触发器
关键字: trigger
create or replace trigger mytrigger
before/after insert/select/delete/update or insert/select/delete/update on tablename 在指定表的指定操作执行前或后 调用
for each row 加了这一句 这个触发器便会在对表中每一条数据进行指定操作时调用 行级触发器
如果没有这句 这个触发器便中会在对表进行指定操作时调用 语句级触发器
begin
执行语句....
end mytrigger;
如果想在语句块中执行DDL 可以使用 execute immediate 'SQL语句' 或 字符串变量
如果执行的不是DDL execute immediate 'select * from s_emp where' into v_result;可以将数据存入变量
v_id number:=2;
execute immediate 'select * from s_emp where id=:n' using v_id; 可以将SQL中:n占位符替换 可以使用多个