oracle 修改触发:NEW值怎么是0??

问题描述

oracle 修改触发:NEW值怎么是0??

触发器代码:
create or replace trigger TR_T_SPILL_LOSS_LIST
BEFORE update on t_spill_loss_list

for each row
declare
M_SPILL_TYPE VARCHAR2(30);
M_SHOP_ID NUMBER(18);
begin
M_SPILL_TYPE := '';
M_SHOP_ID := 0;

SELECT MAX(SPILL_TYPE), MAX(SHOP_ID) INTO M_SPILL_TYPE, M_SHOP_ID
FROM T_SPILL_LOSS
WHERE ISDEL = 0 AND SPILL_ID = :NEW.SPILL_ID AND ROWNUM = 1;

IF (NVL(:NEW.ISAUDITING, 0) = 1) AND (NVL(:OLD.ISAUDITING, 0) = 0) AND (M_SPILL_TYPE='TYPE_1') THEN
INSERT INTO T_STOCK_DETAIL(STOCK_DETAIL_ID, STOCK_DATETIME, STOCK_USER_ID, STAT_ID, SELLER_ID, SKU_ID,
STOCK_ID, CHARGE_QTY, CHARGE_QTY2, LIST_ID, STOCK_DETAIL_MODE, ISDEF)
VALUES(SQ_STOCK_DETAIL_ID.NEXTVAL, SYSDATE, :NEW.CREATE_USER_ID, M_SHOP_ID, :NEW.SELLER_ID, :NEW.SKU_ID,

:NEW.STOCK_ID, :NEW.SPILL_LOSS_QTY, NULL, :NEW.SPILL_LOSS_LIST_ID, 'MODE_BY', 0);
ELSIF (NVL(:NEW.ISAUDITING, 0) = 0) AND (NVL(:OLD.ISAUDITING, 0) = 1) AND (M_SPILL_TYPE='TYPE_1') THEN
INSERT INTO T_STOCK_DETAIL(STOCK_DETAIL_ID, STOCK_DATETIME, STOCK_USER_ID, STAT_ID, SELLER_ID, SKU_ID,
STOCK_ID, CHARGE_QTY, CHARGE_QTY2, LIST_ID, STOCK_DETAIL_MODE, ISDEF)
VALUES(SQ_STOCK_DETAIL_ID.NEXTVAL, SYSDATE, :NEW.CREATE_USER_ID, M_SHOP_ID, :NEW.SELLER_ID, :NEW.SKU_ID,

:NEW.STOCK_ID, NULL, :NEW.SPILL_LOSS_QTY, :NEW.SPILL_LOSS_LIST_ID, 'MODE_BY', 0);
ELSIF (NVL(:NEW.ISAUDITING, 0) = 1) AND (NVL(:OLD.ISAUDITING, 0) = 0) AND (M_SPILL_TYPE='TYPE_2') THEN
INSERT INTO T_STOCK_DETAIL(STOCK_DETAIL_ID, STOCK_DATETIME, STOCK_USER_ID, STAT_ID, SELLER_ID, SKU_ID,
STOCK_ID, CHARGE_QTY, CHARGE_QTY2, LIST_ID, STOCK_DETAIL_MODE, ISDEF)
VALUES(SQ_STOCK_DETAIL_ID.NEXTVAL, SYSDATE, :NEW.CREATE_USER_ID, M_SHOP_ID, :NEW.SELLER_ID, :NEW.SKU_ID,

:NEW.STOCK_ID, NULL, :NEW.SPILL_LOSS_QTY, :NEW.SPILL_LOSS_LIST_ID, 'MODE_BS', 0);

ELSIF (NVL(:NEW.ISAUDITING, 0) = 0) AND (NVL(:OLD.ISAUDITING, 0) = 1) AND (M_SPILL_TYPE='TYPE_2') THEN
INSERT INTO T_STOCK_DETAIL(STOCK_DETAIL_ID, STOCK_DATETIME, STOCK_USER_ID, STAT_ID, SELLER_ID, SKU_ID,
STOCK_ID, CHARGE_QTY, CHARGE_QTY2, LIST_ID, STOCK_DETAIL_MODE, ISDEF)
VALUES(SQ_STOCK_DETAIL_ID.NEXTVAL, SYSDATE, :NEW.CREATE_USER_ID, M_SHOP_ID, :NEW.SELLER_ID, :NEW.SKU_ID,

:NEW.STOCK_ID, :NEW.SPILL_LOSS_QTY, NULL, :NEW.SPILL_LOSS_LIST_ID, 'MODE_BS', 0);
END IF;
end TR_T_SPILL_LOSS_LIST;

执行触发器代码:
UPDATE T_SPILL_LOSS_LIST
SET STOCK_ID =6722
, ISAUDITING = 0
WHERE SPILL_LOSS_LIST_ID =13643;

我明明把STOCK_ID修改成6722了,可是:NEW.STOCK_ID还是等于0?

解决方案

看代码没有问题。你不会是没有符合条件(ISDEL = 0)的M_SPILL_TYPE,最后没有插入新数据吧?

时间: 2024-09-16 12:17:20

oracle 修改触发:NEW值怎么是0??的相关文章

oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变

问题描述 oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变 oracle 中修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变? 有如下两张表,表a和表b 表a 结构如下: ID Name age 1 lisi 18 2 wangwu 21 3 sunliu 34 4 yiliu 24 ... ... ... 其中ID字段为表a主键且自增 表b结构如下: CID CNAME ID 1 aaaaa 1 2 bbbbb 2 3 cccccc 4 4

用orabm测试oracle服务器的TPS值

oracle|服务器 研发论坛讨论主题 葛宏宾109649/user/zte_ltd昨天 16:16 .主题:.用orabm测试oracle服务器的TPS值.分类:测试    用orabm测试oracle服务器的TPS值 1.orabm简介   Orabm是一个开源的oracle性能测试工具,,包含了一套SQL脚本和几个命令行程序. 作者Geoff Ingram,是<High-Performance Oracle: Proven Methods for Achieving Optimum Per

弹出框-jqgrid配合自己写的修改的方法,修改的的值始终是修改之前的,该怎么设置?

问题描述 jqgrid配合自己写的修改的方法,修改的的值始终是修改之前的,该怎么设置? function update(){ var triggerName =$("#tableList").getGridParam("selrow"); var rowData = $("#tableList").jqGrid("getRowData",triggerName); $("#txtTriggerName").

漫 谈oracle 中 的 空 值

oracle  在 数 据 库 中, 空 值 用 来 表 示 实 际 值 未 知 或 无 意 义 的 情 况. 在 一 个 表 中, 如 果 一 行 中 的 某 列 没 有 值, 那 么 就 称 它 为 空 值(NULL). 任 何 数 据 类 型 的 列, 只 要 没 有 使 用 非 空(NOT NULL) 或 主 键(PRIMARY KEY) 完 整 性 限 制, 都 可 以 出 现 空 值. 在 实 际 应 用 中, 如 果 忽 略 空 值 的 存 在, 将 会 造 成 造 成 不 必 要

javascript动态修改Li节点值的方法

 这篇文章主要介绍了javascript动态修改Li节点值的方法,涉及针对li节点的操作技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了javascript动态修改Li节点值的方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Cont

关于c++(表达式必须是可修改的左值)

问题描述 关于c++(表达式必须是可修改的左值) 代码如下,在一个类里定义了如下private型成员变量和成员函数,但是在成员函数里给vals赋值时会提示表达式必须是可修改的左值,请问是为什么呢? private: char vals[3000]; int numDigits; BigInt multDigit(char digit) const { int temp; vals = digit; } 解决方案 caozhy的回答是正确的. 补充一点: vals是数组名,digit是字符变量,不

界面-extjs修改combo的值,setValue()修改不了

问题描述 extjs修改combo的值,setValue()修改不了 如题.,extjs修改combo的值,setValue()修改不了:我要的是刷新界面就修改combo的值, 解决方案 选中项目还是什么?还是修改里面项目的值? setValue是选中项目,要修改值你要获取store后修改store里面的记录var store=cb.getStore();var r=store.getAt(0)//获取第一条记录,或者store.getById(记录id值)或者指定记录r.set('列名称''新

修改UIView的默认Layer后,修改View的值会动态修改Layer的值

修改UIView的默认Layer后,修改View的值会动态修改Layer的值 效果图: 如上图所示,当我们修改了一个UIView的子类中的Layer内置类型时(如上图中我们将CALayer直接替换成了CAGradientLayer类),会直接作用到其内置的Layer当中. 我们可以用这个特性将Layer封装到View当中,然后直接修改view就能达到我们想要实现的目的. 源码: // // AlphaView.h // YXMWeather // // Created by XianMingYo

探索Oracle之数据库升级二 11.2.0.3升级到11.2.0.4完整步骤

探索Oracle之数据库升级二  11.2.0.3升级到11.2.0.4完整步骤   说明:         这篇文章主要是记录下单实例环境下Oracle 11.2.0.1升级到11.2.0.3的过程,当然RAC的升级是会有所不同.但是他们每个版本之间升级步骤都是差不多的,先升级Database Software,再升级Oracle Instance.  Oracle 11.2.0.4的Patchset No:19852360下载需要有Oracle Support才可以.  Patchset包含