oracle触发器和存储过程

本文深入探讨了数据库触发器的类型与语法,包括行级和语句级触发器的区别,以及如何在触发器中使用:new和:old关键字。同时,文章详细介绍了游标的使用方法,包括基本语法和如何在循环中使用游标来处理多行数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:
触发器分为行级触发和语句级触发器,
for each now — 行级触发起
基本语法为:

create or replace trigger tri_name before insert on table_name for each now
begin
select sysdate into :new.col_name from dual;
end;

如果是trigger中,肯定是有以下两个元素的:
:new
:old
指定是同一个值,一个指代原值,一个指代修改后的值
insert时 只有new 没有old 代表着要插入的新记录
delete时 只有old 没有new 代表着要删除的记录
update时 二者都可用 new表示要替换的新数据、old表示要被更改的原来的数据行.
":="是赋值语句

在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的返回值被赋予INTO子句中的变量。

基本语法
两个表
:new和:old关键字 — :new 是要插入表中的 :old 是表中已经存在的旧的记录

一个语句写入所有DML关键字

如果一个trigger中,update、delete、insert都有,则标准格式为:
if inserting then
xxx;
elsif deleting then
xxx;
elsif updating then
xxx;
end if;
除了select语句不同,其余update\delete\insert都是一样的

如何在trigger或者存储过程中创建一个变量,然后在下一个步骤中用到这个变量?
答:declare:就是用来定义变量用的,存储过程、触发器里面都会用.

两个表做一个trigger,则:old :new的含义
如果函数或trigger中出现了异常,则:
EXCEPTION
WHEN NO_DATA_FOUND THEN
return “no data found.” – 处理方法
end;

二:游标cursor:
只有变量和游标才能放在declare代码块中。
游标是维护查询结果的内存中的一个区域,游标在运行DML语句时打开。
查询返回结果超过一行时,就需要一个显式游标,且此时用户不能使用select into语句
select into 可以是多列,但不能是多行,如果查询出有多行,则必须要用游标
基本语法:
Cursor c_s Is Select Name,num From school;

由于游标存储的数据一定会超过一行,因此如果要使用必定会用到循环loop。
使用循环有两种方式:
1.for c in 游标名 loop
xxx – 执行代码块
end loop;
2.loop
fetch 游标名 into 声明变量1,声明变量2
这种方法要手动打开和关闭游标

循环,if elsif代码块 基本语法。

总结触发器的用法:基本语法格式(包括一些基本的关键字、游标),多个DML操作写在一个语句中,
循环,if elsif代码块。

三:
使用group by的两个要素:
出现在select后面的字段要么是group by的字段,要么是聚合函数中的。

权限:权限和同义词一般要一起设置,设置同义词后,查其他用户的表就不需要写其他用户的用户名
设置同义词和把表权限赋给另一用户,都是在同一个用户下执行两个sql语句即可。

四:
execute immediate 作用:在pl/sql(存储过程)中运行DDL语句,DML语句不需要用到。
执行动态sql语句,给动态语句传值(USING 子句)
一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,
但是DDL语句及系统控制语句却不能在PL/SQL中直接使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值