重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创建触发器,给触发器命名,在哪个表上的增删改进行触发,是否为行级触发
太平ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
编写你的逻辑
编译检查是否有语法错误啥的
测试,这里的话,就是你某一个工种的最低工资增加,那属于这个工种的员工中原来是最低工资的也要增加,所以你要先把工种中最低工资查出来,根据工种号,查询属于该工种的人有哪些,把这些员工的工资查出来,再修改工种的最低工资,再查员工工资是否也增加了。
你这表也没有,我门也没有办法给你写一个很详细的。大致思路一般是这样
触发器是一种特殊的存储过程 下面是触发器的详细说明
ORACLE 触发器
ORACLE产生数据库触发器的语法为
create [or replace] trigger 触发器名 触发时间 触发事件
on 表名
[for each row]
pl/sql 语句
其中
触发器名 触发器对象的名称 由于触发器是数据库自动执行 的 因此该名称只是一个名称 没有实质的用途
触发时间 指明触发器何时执行 该值可取
before 表示在数据库动作之前触发器执行
after 表示在数据库动作之后出发器执行
触发事件 指明哪些数据库动作会触发此触发器
insert 数据库插入会触发此触发器
update 数据库修改会触发此触发器
delete 数据库删除会触发此触发器
表 名 数据库触发器所在的表
for each row 对表的每一行触发器执行一次 如果没有这一选项 则只对整个表执行一次
举例 下面的触发器在更新表auths之前触发 目的是不允许在周末修改表
create trigger auth_secure
before insert or update or delete file://对整表更新前触发
on auths
begin
if(to_char(sysdate DY )= SUN
RAISE_APPLICATION_ERROR( 不能在周末修改表auths );
( RAISE_APPLICATION_ERROR是函数 括弧内的 第一参数范围在 ~ 之间 第二个
参数是字符串 大小在 k 超过的话 系统自动截断)
end if;
lishixinzhi/Article/program/Oracle/201311/17609
你说的这东西本身就不适合弄做触发器
std表是部门号与某部门的平均工资
如果往emp里插入一条记录的话,那么整个部门的平均工资就会发生变化
所以这个时候std表里的数据就不是真正的平均工资了
不知道为什么要这么做,你们老师想不开吧?
而且emp1的表结构是什么?
还有,工资低于所属部门的平均工资的职员信息插入到emp1表中?
那么难道不是每插入一个员工的话,emp1表就要插入一遍,那么emp1表里会有N
多重复数据
创建两个表:
create table a
(stdid int,
stdname varchar2(10));
create table b
(stdid int,
stdname varchar2(10));
创建触发器:
CREATE OR REPLACE TRIGGER tr_insert
after insert
ON a
FOR EACH ROW
BEGIN
INSERT INTO b(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
END;
验证,在a表中插入数据:
insert into a values (1,'a');
commit;
验证b表结果:
今天在项目中遇到一个比较棘手的问题,需要用到触发器。在编写触发器和调试过程中遇到下列问题,在此记录一下:
由于之前写的触发器都能正常运行,就没有涉及到触发器的调试,今天发现触发器没起作用,需要调试,竟不知道在哪儿调试。在网上借鉴一些别人的经验(),记录一下。在PL/SQL中,触发器的调试方法如下:
1,选中要调试的触发器,右击,然后勾选 Add debug information,只有勾选这个按钮后,调试才能进入到断点。
2,选中触发器,点击 Edit,到Edit 界面,在要调试的行号前面单击,或者右键,添加断点。
3,在菜单的新建中选择“测试窗口”,打开一个如下块,在begin和end中间添加能触发触发器的语句
4,按F9或者点击调试菜单中的开始菜单,进入运行调试状态(后面的红框是单步进入)
5,点击运行图标跳到触发器中断点位置
6,鼠标放到变量上可以显示变量值。
7,如果有异常,就弹出相关异常信息。
调试的时候发现new对象的日期格式为中文,而后面又需要yyyy-mm-dd 的格式来作为查询条件。所以就在赋值的时候转换一下。
在select into 给变量赋值的时候,select 查询出来的集合为空,导致报错ORA-01403,解决方案就是将这一段用begin end 包裹起来,抛出改异常的时候给变量一个默认值。如下图:
1
创建table1:
CREATE
TABLE
table1
(
id
number(5),
name
char(20),
age
number(2),
);
2
创建table2,并给count字段初值为0
CREATE
TABLE
table2
(
count
number(5),
);
INSERT
INTO
table2
VALUES
(0);
3
插入触发器
CREATE
OR
REPLACE
TRIGGER
add_after_insert
AFTER
INSERT
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
4
删除触发器
CREATE
OR
REPLACE
TRIGGER
add_after_delete
AFTER
DELETE
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
5
更新触发器
CREATE
OR
REPLACE
TRIGGER
add_after_update
AFTER
UPDATE
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END