过程&&函数
过程
- 用于在数据库中完成特定的操作或者任务(如插入、删除)
- 程序头部声明用procedure
- 程序头部声明时不需要描述返回类型
- 以编译后的形式存放在数据库中
- 可以使用in/out/in out三种模式的参数
- 可以作为一个独立的PL/SQL语句来执行
- 可以通过out/in out返回零个或者多个值
- SQL语句(DML或SELECT)中不可调用存储过程
- 示例一
DROP PROCEDURE IF EXISTS selectT;
CREATE PROCEDURE selectT(in id1 VARCHAR(10))
BEGIN
SELECT * from t_test where USER_ID = id1;
end;
call selectT(1);
- 示例二
DROP PROCEDURE IF EXISTS CustomerInsert;
create procedure CustomerInsert (
in A int,
in B VARCHAR(20)
)
Begin
insert into t_test(USER_ID,USER_NAME) values(A,B);
End
call CustomerInsert(21,'测试')
函数
- 用于特定的数据(如选择)
- 程序头部声明用function
- 程序头部声明要描述返回类型,而且PL/SQL块中至少要包括一个有效的return语句
- 以编译后的形式存放在数据库中
- 可以使用in/out/in out三种模式的参数
- 不能独立执行,必须作为表达式的一部分调用
- 通过return语句返回一个值,且该值要与申明部分一致,也可以是通过out类型的参数带出的变量
- SQL语句(DML或SELECT)中可以调用函数
触发器
触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句
- insert
create trigger tri_insert
on student
for insert
as
declare @student_idchar(10)
select @student_id=s.student_id from students
inner join insertedion s.student_id=i.student_id
if @student_id='0000000001'
begin
raiserror('不能插入1的学号!',16,8)
rollbacktran
end
go
- update
create trigger tri_update
on student
for update
as
if update(student_id)
begin
raiserror('学号不能修改!',16,8)
rollbacktran
end
go
- delete
create trigger tri_delete
on student
for delete
as
declare @student_idvarchar(10)
select @student_id=student_id from deleted
if @student_id='admin'
begin
raiserror('错误',16,8)
rollbacktran
end