过程&&函数

过程

  • 用于在数据库中完成特定的操作或者任务(如插入、删除)
  • 程序头部声明用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
原文地址:https://www.cnblogs.com/pengdt/p/13062304.html