触发器
第四章触发器()

Q
G2 门输出
Q RD Q
& G2 1 Q Q
1 SD
输入 SD RD 00 01 10 11
输出 QQ
10 01 不变
RD 1 功能说明
触发器置 1 (1态) 触发器置 0 (0态) 触发器保持原状态不变
(4-10)
2. 工作原理及逻辑功能
Q 1
G1
Q
输出既非 0 状态,
(4-24)
2. D 触发器旳特征表、特征方程、驱动表和状态转换图
D 触发器特征表
D Qn Qn+1 000 010 101 111
特征方程 Qn+1 = D
无约束
Qn+1 在 D = 10 时 就为 10,与 Qn 无关。
D 触发器驱动表 Qn Qn+1 D 00 0 01 1 10 0 11 1
核电子学基础Ⅱ
第四章 触发器
(4-1)
4.1 概 述
主要要求:
掌握常用触发器旳基本特征和作用。 了解触发器旳类型和逻辑功能旳描述措施。
(4-2)
一、触发器旳基本特征和作用
Flip - Flop,简写为 FF,又称双稳态触发器。
基本特征
(1)有两个稳定状态(简称稳态),恰好用来表达逻辑 0 和 1。 (2)在输入信号作用下,触发器旳两个稳定状态可相互转换
称约束条件
(4-13)
[例] 设下图中触发器波初形始分状析态举为例0,试相应输入波形 画出 Q 和 Q 旳波形。
RD R
Q RD
SD S
Q SD
保持 置 0保持置 1 初态为 0,故保持为 0。
解:
Q
Q
触发器(电子技术课件)

触发器•1.概述•2.SR锁存器•3.电平触发的触发器•4.边沿触发的触发器•5.触发器的逻辑功能及其描述方法一、概述1.触发器的特点(1)有两个稳定状态(简称稳态),用来表示逻辑0和1。
一个触发器可存储 1 位二进制数码(2)在输入信号作用下,触发器的两个稳定状态可相互转换(称为状态的翻转)。
(3)输入信号消失后,新状态可长期保持下来,具有记忆功能。
2.触发器的分类(1)按电路结构分(不同的电路结构在状态变化过程中有不同的动作特点)基本触发器:输入信号电平直接控制同步触发器:时钟电平直接控制;CP=1或0时有效主从触发器:主从控制脉冲触发;CP下降沿或上升沿到来时有效边沿触发器:时钟边沿控制;CP下降沿或上升沿时刻有效(2)按逻辑功能分RS 触发器JK触发器D触发器T触发器3.触发器的逻辑功能指触发器输出次态Q n+1与输出的现态Q n及输入信号之间的逻辑关系。
触发器逻辑功能的描述方法主要有特性表、特性方程、驱动表(激励表)、状态转换图(状态图)和波形图(时序图)等。
SR(Set-Reset)锁存器(又叫基本RS触发器)是各种触发器构成的基本部件,也是最简单的一种触发器。
锁存器---不需要触发信号,由输入信号直接完成置0或置1操作。
触发器---需要一个触发信号(称为时钟信号CLOCK),只有触发信号有效时,才按输入信号完成置0或置1操作。
1.电路结构与工作原理(1)用或非门组成的锁存器•电路组成信号输入端互补输出端Q和Q′为互补输出端,正常工作时,它们的输出状态相反。
通常用Q的状态表示触发器的状态,即:Q = 0,Q'= 1时,称为触发器的“0”态。
Q = 1,Q'= 0时,称为触发器的“1”态。
•工作原理0①R D =0,S D =1时1001锁存器为“1”态Q'=0Q =1②R D =1,S D =0时101锁存器为“0”态Q'=1Q =0•工作原理③RD =0,SD=0时11锁存器为“0”态Q'=1Q=0锁存器为“1”态Q'=0Q=1•若Q = 00•若Q = 11锁存器的状态保持不变01 0•工作原理1④R D =1,S D =1时1“禁止”态Q'=0Q =0•Q 和Q'违背互补输出的条件。
第四章---触发器

为了克服主从RS触发器使用时必须遵循SR=0约束条件的缺点 而设计。
J=K=1时, Qn1 Qn 。
主从JK触发器特性表
J 0 0 0 0 1 1 1 1
K 0 0 1 1 0 0 1 1
Qn 0 1 0 1 0 1 0 1
Qn+1 0 1 0 0 1 1 1 0
功能说明 保持原状态 置0 置1 每输入一个脉冲 输出状态改变一 次
特点: ① 功能和同步RS触发器一样,只是主从RS触发器的翻转是在CP 由1变0时刻(CP下降沿)发生的。 ② CP一旦变为0后,主触发器被封锁,其状态不再受R、S影响, 因此不会有空翻现象。
存在问题
(1) 主触发器仍存在空翻现象 (2) 仍需遵循约束条件SR=0
书例4.2.3
(2) 主从JK触发器
1 1
1 1
0 0
1 1
ห้องสมุดไป่ตู้
0 1
0 1
0 0
1* 1*
置0
输出状态不稳定
约束条件:SR=0
有时需在CP信号到来之前(CP=0)将触发器预先置成指定的 状态,为此同步RS触发器上还设有异步置位输入端和异步 复位输入端。正常工作时应使它们处于高电平。
2. 动作特点 电平触发:CP=1的全部时间内S和R的变化都将引起触发器 输出端状态的变化。所以,如果在CP=1期间R、S发生多次 变化,则触发器的状态也可能发生多次翻转。 在一个时钟脉冲周期中,触发器发生多次翻转的现象叫做空翻。 空翻是一种有害的现象,它使得时序电路不能按时钟节拍工作, 造成系统的误动作。 书例4.2.2
§4.2 触发器的电路结构与动作特点
一、基本RS触发器的电路结构与动作特点
1. 用或非门构成
第4章 触发器

4.2
同步触发器
4.2.1 同步RS触发器
一、电路组成及工作原理 1.电路组成及逻辑符号 (1)电路组成:如仿真图4.2.1(a)所示。 (2)逻辑符号:如仿真图4.2.1(b)所示。 2.工作原理 (1)特性表:如仿真图4.2.1所示。 (2)特性方程:Qn+1=S+R’Qn RS=0 CP=1期间 有效。 二、主要特点 1.时钟电平控制 2.R、S之间有约束
本
章
小
结ቤተ መጻሕፍቲ ባይዱ
一、基本触发器:把两个与非门或者或非门交叉 连接起来,便构成了基本触发器。 二、同步触发器:在基本触发器基础上,增加两 个控制门和一个控制信号,便构成同步触发器。 三、边沿触发器:把两个同步D触发器级联起来, 便可构成边沿D触发器,再加改进就可得到边沿JK 触发器。 四、边沿触发器逻辑功能分类 五、触发器逻辑功能表示方法及转换 六、触发器的电气特性
4.1 基本触发器 4.1.1 用与非门组成的基本触发器
一、电路组成及逻辑符号 如仿真图4.1.1所示。 1.电路组成:如仿真图4.1.1(a)所示。 2.逻辑符号:如仿真图4.1.1(b)所示。 二、工作原理 1.电路有两个稳定状态 电路无输入信号即R’=S’=1时,有两个稳定状态。 (1)0状态:把Q=0、Q’=1的状态定义为0状态。 (2)1状态:把Q=1、Q’=0的状态定义为1状态。
二、集成边沿JK触发器
1.CMOS边沿JK触发器CC4027 (1)逻辑符号与引出端功能图:如仿真图4.3.6 所示。 (2)特性表:如仿真图4.3.6所示。 2.TTL边沿JK触发器74LS112 (1)逻辑符号与引出端功能图:如仿真图4.3.7 所示。 (2)特性表:如仿真图4.3.7所示。
三、主要特点
什么是触发器?触发器的使用场景有哪些?

什么是触发器?触发器的使用场景有哪些?在数据库管理系统中,触发器(Trigger)是一种与表关联的存储过程,它在表上的特定事件(如插入、更新、删除)发生时自动执行。
触发器可以用来实现在数据变更前后执行特定的操作,例如验证、日志记录、数据同步等。
触发器的基本特点:事件驱动:触发器是与特定的数据库事件关联的,如INSERT、UPDATE、DELETE 等。
自动执行:当触发器关联的事件发生时,触发器会自动执行相应的操作,而不需要手动触发。
与表关联:触发器是与特定表关联的,通常在表的创建时定义触发器。
触发器的使用场景:数据验证和完整性:在插入、更新或删除数据前后,使用触发器对数据进行验证和保持完整性。
例如,确保某些字段不为 NULL,或执行外键约束。
日志记录和审计:在数据变更前后,记录变更的日志,以便进行审计和追踪。
派生数据的更新:当表中的数据发生变更时,更新其他表中的相关数据,保持派生数据的一致性。
自动计算字段:在某个字段发生变更时,触发器可以用于自动计算相关字段的值,而不需要手动更新。
数据同步:当一个表的数据发生变更时,使用触发器将相关数据同步到其他表,保持数据的一致性。
复杂约束的实现:在某些情况下,复杂的业务规则或约束无法通过常规的约束机制实现,可以通过触发器来进行自定义处理。
触发器的基本语法:在不同的数据库系统中,触发器的语法可能有所不同。
以下是一个通用的触发器创建语法:sqlCopy codeCREATE TRIGGER trigger_nameBEFORE/AFTER INSERT/UPDATE/DELETE ON table_nameFOR EACH ROWBEGIN-- 触发器逻辑END;BEFORE/AFTER 指定触发器在事件发生前或发生后执行。
INSERT/UPDATE/DELETE 指定触发器关联的事件。
FOR EACH ROW 指定触发器对每一行执行一次。
需要根据具体的数据库系统来了解和使用触发器的相关语法和规范。
数字电路触发器

时序测试
检查触发器在时钟信号的驱动下是否 能够准时地翻转状态,并确保建立时 间和保持时间满足设计要求。
鲁棒性测试
模拟各种异常情况,如电源电压波动、 时钟信号抖动等,以检验触发器的鲁 棒性和稳定性。
触发器的测试实例
JK触发器测试
通过设置不同的J和K输入信号, 观察触发器的输出状态,验证其 功能正确性。
平时,输出状态保持不变。
T触发器和T'触发器
总结词
T触发器和T'触发器是特殊类型的触发器,具有时钟控制的功能。
详细描述
T触发器和T'触发器只有一个输入端T和一个输出端Q。在时钟信号的上升沿时,T触发器的输出状态会 翻转;在时钟信号的下降沿时,T'触发器的输出状态会翻转。如果T为高电平,则T触发器的输出状态 会一直保持高电平;如果T为低电平,则T'触发器的输出状态会一直保持低电平。
D触发器
总结词
D触发器是一种边沿触发的触发器,只在时钟信号的上升沿或下降沿时触发。
详细描述
D触发器只有一个输入端D和两个输出端Q和Q'。在时钟信号的上升沿或下降沿时,D触发器的输出状态会根据输 入端D的状态而改变。如果D为高电平,则Q为高电平,Q'为低电平;如果D为低电平,则Q为低电平,Q'为高电 平。
02
存储功能
触发器能够存储二进制信息,并 在时钟信号的下一个边缘再次翻来自转。04输入特性
触发器有两个输入端,分别用于 接收数据输入和控制信号。
触发器的参数
01
建立时间
触发器在时钟信号的边缘之前需要 接收数据的时间。
传播延迟
从时钟信号的边缘到触发器输出稳 定状态所需的时间。
03
什么是电路中的触发器

什么是电路中的触发器触发器(Flip-Flop)是数字电路中最基本的存储器件之一,用于存储和操控二进制信息。
在电子计算机和其他数字系统中,触发器广泛应用于寄存器、计数器、存储器等关键电路中。
一、触发器的定义触发器是一种具有两个稳定状态的存储器件,能够在特定的时钟脉冲作用下,改变其输出状态。
它能够将输入的数字信号,根据特定的逻辑功能,进行记忆、延迟和放大,输出到下一个触发器或其他逻辑门电路。
二、触发器的原理1. RS触发器(RS Flip-Flop)RS触发器是最简单的触发器类型之一,由两个互补的反馈环路和两个输入端组成。
它可以通过两个输入信号(S和R)的不同组合设置和复位。
2. D触发器(D Flip-Flop)D触发器是最常见的触发器类型之一,由一个数据输入端D、一个时钟输入端CLK以及一个输出端Q组成。
D触发器的输出Q始终与输入信号D的状态保持一致,直到时钟脉冲到达。
3. JK触发器(JK Flip-Flop)JK触发器是基于RS触发器演化而来的一种触发器。
它使用两个输入端J和K,可以通过不同的输入状态实现设置、复位和翻转。
4. T触发器(T Flip-Flop)T触发器是特殊的JK触发器,只有一个输入端T(Toggle)。
当时钟脉冲到来时,T触发器的输出状态进行翻转,即从低位变为高位,或从高位变为低位。
三、触发器的应用触发器在数字系统中有着广泛的应用。
以下是触发器的一些常见应用场景:1. 计数器计数器是一种基于触发器的电路,用于计量输入脉冲的数量。
触发器被用于储存和更新计数值,并在特定条件下进行复位和循环。
2. 寄存器寄存器是由多个触发器组成的存储器件,用于存储和传输二进制数据。
它被广泛应用于CPU、RAM等计算机组件中,用于暂存和处理数据。
3. 存储器存储器是一种用于存储大量数据的设备,触发器被用于实现存储单元,将数据在内部进行存储和访问。
4. 数据传输与锁存在串行通信或并行数据传输中,触发器被用于实现数据的存储与传输,以及数据同步和时序控制。
第5章-触发器

JK 00 01 10 11
Qn+1 Qn 0 1 Qn
CP
在CP上升沿时,接受J、K 信息,Q不变化
在CP下降沿时,根据接受 到旳J、K信息,Q变化
主从型J-K触发器工作波形图举例
J K Qn+1
CP
0 0 Qn
01 0
J
10 1
1 1 Qn
K
CP
接受JK 信号
Q Q状态 转变
0
置1 清0 翻转 翻转
2、触发器功能表
CP R S Q n+1 1 0 0 Qn 1 01 1
阐明 保持 置1
1 1 0 0 清0
&
&
1 1 1 不定 防止
R
R、S
控制端
CP
S
CP: 时钟脉冲
(Clock Pulse)
0 Qn 保持
3、逻辑符号
Q
Q
R
S
R CP S
4、特征方程
Qn+1=S+RQn SR=0(约束条件)
• 主从触发器旳特点 由两个触发器构成(主触发器和从触发器) 触发方式:主从触发方式(上升沿接受,下降沿触发)
5.4.1 主从RS触发器
1、构造:两个同步RS触发器构成,主从两触发器时钟脉冲反相 2、原理:CP:主触发器输入暂存,CP:从触发器封锁,保持原 状态;时钟后沿出现后从触发器接受主触发器信号而主触发器被 封锁。 3、优点:防止空翻现象 4、缺陷:CP高电平期间受R、S变化旳影响会造成误动作
指R、S从01或10变成11时,输出端状态不变
R-S触发器真值表
Q 1
&
01 RD
Q 1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按照触发方式,oracle的触发器分为语句级和行级两种类型,在视图上所创建的触发器叫做什么类型的触发器?DML触发器有三类:1,insert触发器;2,update触发器;3,delete触发器;触发器的组成部分:触发器的声明,指定触发器定时,事件,表名以类型触发器的执行,PL/SQL块或对过程的调用触发器的限制条件,通过where子句实现类型:应用程序触发器,前台开发工具提供的;数据库触发器,定义在数据库内部由某种条件引发;分为:DML触发器;数据库级触发器;替代触发器;DML触发器组件:1,触发器定时2,触发器事件3,表名4,触发器类型5,When子句6,触发器主体可创建触发器的对象:数据库表,数据库视图,用户模式,数据库实例创建DML触发器:Create [or replace] trigger [模式.]触发器名Before| after insert|delete|(update of 列名)On 表名[for each row]When 条件PL/SQL块For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;Insert触发器的创建:create or replace trigger tg_insertbefore insert on studentbegindbms_output.put_line('insert trigger is chufa le .....');end;/执行的效果:SQL> insert into student2 values(202,'dongqian','f');insert trigger is chufa le .....update表级触发器的例子:create or replace trigger tg_updatestudentafter update on studentbegindbms_output.put_line('update trigger is chufale .....'); end;/运行效果:SQL> update student set se='f';update trigger is chufale .....已更新8行;可见,表级触发器在更新了多行的情况下,只触发了一次;如果在after update on student后加上For each row的话就成为行级触发器,运行效果:SQL> update student set se='m';update trigger is chufale .....update trigger is chufale .....update trigger is chufale .....update trigger is chufale .....update trigger is chufale .....update trigger is chufale .....update trigger is chufale .....update trigger is chufale .....已更新8行;:new 与: old:必须是针对行级触发器的,也就是说要使用这两个变量的触发器一定有for each row这两个变量是系统自动提供的数组变量,:new用来记录新插入的值,old用来记录被删除的值;使用insert的时候只有:new里有值;使用delete的时候只有:old里有值;使用update的时候:new和:old里都有值;可以这样使用:dbms_output.put_line('insert trigger is chufadbms_output.put_line('new id is : '||:new.stuidbms_output.put_line('new name is : '||:new.stdbms_output.put_line('new se is : '||:new.se); 可以这样从数据字典中查看一个表上有哪几个触发器:SQL> select trigger_name from user_triggers2 where table_name=upper('student');TRIGGER_NAME------------------------------TG_INSERTTG_UPDATESTUDENT带有:old变量的行级delete触发器:create or replace trigger tg_deletestudentbefore delete on studentfor each rowbegindbms_output.put_line('old is: '||:old.stuid);dbms_output.put_line('old name: '||:old.stuname); end;/运行效果:SQL> delete from student;old is: 202old name: dongqianold is: 101old name: liudehuaold is: 102old name: lingqingxiaold is: 103old name: lichanggongold is: 104old name: zhenxiuwenold is: 1001old name: lilianjieold is: 1009old name: tongleifuckold is: 203old name: kfdjold is: 209old name: fuck已删除9行When的使用:如果在begin也就是说触发器的PL/SQL主体块执行前加上when(old.se=’f’)的话,DML操作照做不误,但是只会在删除Se=’f’的那行的时候才会执行触发器的主体动作,执行效果:SQL> delete from student;old is: 209old name: fuck已删除9行;这里虽然删了9行,但是只执行了一次触发器的主体,做为一个行级触发器;混合类型触发器:Inserting,deleting,updating三个谓词可以分别指示当前操作到底是哪个;create or replace trigger hunhetriggerbefore insert or update or delete on studentfor each rowbeginif inserting thendbms_output.put_line('insert le.........');end if;if deleting thendbms_output.put_line('delete le .......');end if;end;/插入的时候就自动判断当前动作为插入:SQL> insert into student values(303,'me','f');insert le.........删除的时候就自动判断当前动作为删除:SQL> delete from student;delete le .......注意,既然触发器内部的主体PL/SQL是语句,那么它同样也可以是插入删除操作而不一定只是dbms_output打印一些信息;这正是日志表的原理:在用户执行了DML语句的时候触发主体为插入日志表以记录操作轨迹的触发器;为什么用触发器?当我们有两个表用来记录商品的出库入库情况,good_store 用来记录库存的产品类别和数量,而good_out用来记录出库的产品类别和数量,那么每当我们出库的某个类别的产品一定数量的时候,我们应该在good_out中插入该产品的类别和出库数量,而同时也应该在good_store表中用update来更新库存的相应类别的产品的数量;这就交给了我们两个必须完成的任务:插入good_out表后更新good_store表,这样的手工过程使得我们觉得非常ugly,如果只做其中一个那造成数据的不一致;所以现在我们可以用触发器,在Good_out表的插入操作上绑定一个对good_store进行更新的触发器;当然这个过程应该是一个事务,你不必担心插入good_out表执行了,而绑定在这个动作上的触发器操作不会执行,相信Oracle设计为原子性了;注意:触发器会使得原来的SQL语句速度变慢;替代触发器:创建在视图上的触发器,就是替代触发器,只能是行级触发器;为什么要用替代触发器?假如你有一个视图是基于多个表的字段连接查询得到的;现在如果你想直接对着这个视图insert;那你一定在想,我对视图的插入操作怎么来反应到组成这个视图的各个表中呢?事实上,除了定义一个触发器来绑定在对视图上的插入动作上外,你没有别的办法通过系统的报错而直接向视图中插入数据;这就是我们用替代触发器的原因;替换的意思实际上是触发器的主体部分把对视图的插入操作转换成详细的对各个表的插入;变异表:变异表就是当前SQL语句正在修改的表,所以在一个变异表上绑定的触发器不可以使用cout()函数,原因很简单:SQL语句刚刚修改了表,你怎么统计??约束表:维护:Alter trigger …..disenable; 使得触发器不可用;Alter trigger ……enable; 开启触发器;Oracle的内置程序包扩展数据库的功能;为PL/SQL提供对SQL功能的访问;一般具有sys权限的高级管理人员使用;一个典型的程序包就是dbms_output,你老是用它的过程put_line();Dbms_standard 提供语言工具;Dbms_lob操作Oracle LOB;就是针对大型数据的操作设计的;Dbms_lock用户定义的锁;Dbms_job 允许对PL/SQL过程进行调度;Dbms_alert 支持数据库事件的异步通知;1,dbms_output的一些过程:a):enableb):disablec):put只是把数据放到缓存(SQL-Plus的缓存,实际就是整个窗口)中,无输出功能;d):put_line可以使得以前放在缓存中所有数据输出;并且换到下一行;e):new_linef):get_lineg):get_lines2,dmbs_lob ,这个包只能是由系统管理员来操作;Clob以字符数据存储可达2G;Blob以二进制数据存储可达4G;Nclob以unicode字符存储;一个文件下载列表的例子:创建下载目录表:create table downfilelist(id varchar(20) not null primary key,name varchar(40) not null,filelocation bfile,description clob)/创建目录:create or replace directory filedir as 'f:\oracle'/只是向Oralce注册了目录,实际上并不会真的建立目录在磁盘上;Oracle无权管理和锁定操作系统的文件系统;向目录表中插入数据:insert into downfilelistvalues('10001','oracle plsal编程指南',bfilename(upper('filedir'),'demo.mp3'),'this is a mp3 music')insert into downfilelistvalues('10002','java 大权', bfilename(upper('filedir'),'x.jpg'),'good super girl')/在filedir的目录f:\oracle下实际存储着demo.mp3 ,x.jpg;注意,如果你试图查询,效果是:sys>select * from downfilelist;SP2-0678: 列或属性类型无法通过SQL*Plus 显示因为第三列是无法显示的,是一个二进制的;下面使用dbms_lob的一些过程来进行操作:1,read过程declaretempdesc clob;ireadcount int;istart int;soutputdesc varchar(100);beginireadcount:=5;istart:=1;select description into tempdesc from downfilelist where id='10001';dbms_lob.read(tempdesc,ireadcount,istart,soutputdesc); 把clob类型的tempdesc中的数据读到字符类型的soutputdesc里;dbms_output.put_line('Top 5 character is: '||soutputdesc);end;/注意,对unicode来说,汉字和字母所占的位数是一样的;2,getlength函数select description into tempclob from downfilelist where id=‘10001’;ilen:=dbms_lob.GetLength(tempclob);append,copy……..发现这样的现象:select x into y的时候,y并不是独立于x的拷贝,因为当修改y的时候x也被修改了;3, fileexists函数select id ,dbms_lob.fileexists(filelocation) from downfilelist;如果在bfile类型字段filelocation指定的系统下的目录中存在filelocation指定的系统文件,则返回int 1,否则返回0;这说明Oracle还是可以检测到系统的文件情况的,如同java.io包里的类一样;对bfile类型数据的操作函数有fileisopen,fileopen,fileclose等等;创建触发器示例1.CREATE TRIGGER 1 trigger22. 2 AFTER 3 UPDATE OF 4 ON_HAND, MAX_STOCKED ON 5 PARTS3. 6 REFERENCING NEW AS N OLD AS O4. 7 FOR EACH ROW5. 8 WHEN(N_ROW.ON_HAND < 0.10 * N_ROW.MAX_STOCKED)6. 9 BEGIN ATOMIC7. 10 VALUES(ISSUE_SHIP_REQUEST(N_ROW.MAX_STOCKED -8. N_ROW.ON_HAND,9. N_ROW.PARTNO));10.END@1 触发器名称。