- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一种奇怪的、神秘的数据损坏错误,每隔几周就会弹出一次,但没有人知道为什么。到目前为止,表上的主键似乎是自发改变的,所以指向它的其他行现在都被搞砸了。
尽管我仍在寻找此问题的根本原因(无法重现),但我希望进行某种临时黑客攻击以防止列值发生变化。这是表架构:
CREATE TABLE TPM_INITIATIVES (
INITIATIVEID NUMBER NOT NULL,
NAME VARCHAR2(100) NOT NULL,
ACTIVE CHAR(1) NULL,
SORTORDER NUMBER NULL,
SHORTNAME VARCHAR2(100) NULL,
PROJECTTYPEID NUMBER NOT NULL,
CONSTRAINT TPM_INITIATIVES_PK PRIMARY KEY(INITIATIVEID)
NOT DEFERRABLE
VALIDATE
)
INITIATIVEID
永远,无论正在运行什么奇怪的查询。
INITIATIVEID
正在被改变,如果是这样,抛出一个INITIATIVEID
的查询是什么?改变?
最佳答案
如果子表填充了引用 INITIATIVEID
的数据列,Oracle 应该通过阻止您通过更改父项的主键来创建孤立行来自动使更改主键值变得困难。因此,例如,如果有一个子表的外键约束为 TPM_INITIATIVES
在这个子表中有一行 INITIATIVEID
17,您将无法更改 INITIATIVEID
TPM_INITIAITVES
中的行的当前值为 17 的表。如果任何子表中没有行引用 TPM_INITIATIVES
中的特定行表,您可以更改该值,但是,大概,如果没有关系,更改主键值并不重要,因为根据定义,它不会导致数据完整性问题。当然,您可以编写将新行插入到 TPM_INITIATIVES
中的代码。带新 INITIATIVEID
,将子表中所有引用旧行的行改为引用新行,然后修改旧行。但这不会被任何提议的解决方案所困。
如果您的应用程序已定义子表但未声明适当的外键约束,这将是解决问题的最佳方法。
话虽如此,Arnon 创建 View 的解决方案应该有效。您将重命名表,创建一个与现有表同名的 View ,并(可能)在 View 上定义一个 INSTEAD OF 触发器,该触发器永远不会更新 INITIATIVEID
柱子。这不应该需要更改应用程序的其他部分。
您还可以在表上定义触发器
CREATE TRIGGER trigger_name
BEFORE UPDATE ON TPM_INITIATIVES
FOR EACH ROW
DECLARE
BEGIN
IF( :new.initiativeID != :old.initiativeID )
THEN
RAISE_APPLICATION_ERROR( -20001, 'Sorry Charlie. You can''t update the initiativeID column' );
END IF;
END;
CREATE TABLE TPM_INITIATIVES_HIST (
INITIATIVEID NUMBER NOT NULL,
NAME VARCHAR2(100) NOT NULL,
ACTIVE CHAR(1) NULL,
SORTORDER NUMBER NULL,
SHORTNAME VARCHAR2(100) NULL,
PROJECTTYPEID NUMBER NOT NULL,
OPERATIONTYPE VARCHAR2(1) NOT NULL,
CHANGEUSERNAME VARCHAR2(30),
CHANGEDATE DATE,
COMMENT VARCHAR2(4000)
);
CREATE TRIGGER trigger_name
BEFORE INSERT or UPDATE or DELETE ON TPM_INITIATIVES
FOR EACH ROW
DECLARE
l_comment VARCHAR2(4000);
BEGIN
IF( inserting )
THEN
INSERT INTO tpm_initiatives_hist( INITIATIVEID, NAME, ACTIVE, SORTORDER, SHORTNAME, PROJECTTYPEID,
OPERATIONTYPE, CHANGEUSERNAME, CHANGEDATE )
VALUES( :new.initiativeID, :new.name, :new.active, :new.sortOrder, :new.shortName, :new.projectTypeID,
'I', USER, SYSDATE );
ELSIF( inserting )
THEN
IF( :new.initiativeID != :old.initiativeID )
THEN
l_comment := 'Initiative ID changed from ' || :old.initiativeID || ' to ' || :new.initiativeID;
END IF;
INSERT INTO tpm_initiatives_hist( INITIATIVEID, NAME, ACTIVE, SORTORDER, SHORTNAME, PROJECTTYPEID,
OPERATIONTYPE, CHANGEUSERNAME, CHANGEDATE, COMMENT )
VALUES( :new.initiativeID, :new.name, :new.active, :new.sortOrder, :new.shortName, :new.projectTypeID,
'U', USER, SYSDATE, l_comment );
ELSIF( deleting )
THEN
INSERT INTO tpm_initiatives_hist( INITIATIVEID, NAME, ACTIVE, SORTORDER, SHORTNAME, PROJECTTYPEID,
OPERATIONTYPE, CHANGEUSERNAME, CHANGEDATE )
VALUES( :old.initiativeID, :old.name, :old.active, :old.sortOrder, :old.shortName, :old.projectTypeID,
'D', USER, SYSDATE );
END IF;
END;
TPM_INITIATIVES_HIST
查看随着时间的推移对特定行所做的所有更改。因此,您可以查看主键值是否在更改,或者是否有人只是在更改非键字段。理想情况下,您可能有额外的列可以添加到历史记录表中以帮助跟踪更改(即也许来自
V$SESSION
的某些内容可能有用)。
关于sql - 在 Oracle 中将列设为 READONLY 的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330884/
我有一个只读的文本框,但想回发它的值。之前我将代码设置为: /asp:TextBox> 它不工作。我删除了 ReadOnly="true" 并在代码中添加了以下行 txtContractStartDa
一些背景 因此,我正在完成一个 Web 应用程序的一些增强功能,该应用程序可以对数据进行一些自动插值。用户填写了一些文本框,它们之间的其他文本框具有自动计算的值。接收自动计算值的文本框必须是只读的,以
我刚刚审查了一些代码,注意到有人将成员标记为 readonly private。这与 private readonly 有任何不同吗? 例子: readonly private MyClass myI
我刚刚被告知 readonly ref readonly 现在是有效的 C#,我可以清楚地看到它作为面试问题的用途,但除此之外,它什么时候可以用于现实生活? 最佳答案 当您有一个可变结构时,您希望其中
当我使用以下命令运行我的Reactjs + ElectronJS应用程序时,它可以很好地运行: yarn start 。 当我尝试使用以下命令生成该错误时: yarn build 。 我不明白这是怎么
例子1 private const string _DefaultIconPath = _IconsPath + "default.ico"; private const string _IconsP
尝试访问 RecipeList.js 和 Recipe.js 的 .props 时出现语法错误。 这是 Recipe.js 的代码示例: import React, {Component} from
我是 Vue 新手。我正在尝试开发一个聊天应用程序,其中好友列表将显示在左侧菜单上,聊天框将显示在正文中。我正在使用 ajax 调用加载好友列表,并根据好友 ID 路由到聊天框。这是代码示例。
我是 SharePoint 的初学者开发人员,我一直使用 Google map 。我安装了 google-maps-react 但有一个错误告诉我。我不知道如何解决它...请让我知道这个解决方案...
我不确定我是否理解 IE 在我正在使用的脚本中的行为。这是我正在使用的脚本的一部分,它似乎在 Chrome 中运行良好 $(document).keydown(function (event) {
我对原生 react 完全陌生。 我有以下组件: 播放列表: export default class Playlists extends Component { playlists = [
所以我正在使用 MVC3 生成一个文本区域元素。我使用以下标记生成我的元素: model.Description, new { value=Model.Description, @class="re
我有一个从 php 文件创建的表单,以及一个具有只读属性的文本字段,在单击编辑按钮时(编辑按钮也在创建输入字段期间创建),我希望所述字段是可编辑,我该怎么做? value= readOnly>
我正在尝试输入组件的属性并同时使用 URL 参数。我收到以下错误: Property 'match' does not exist on type 'Readonly & Readonly' 这是我的
这个问题在这里已经有了答案: Array.IsReadOnly inconsistent depending on interface implementation (4 个答案) 关闭 8 年前。
根据文档 ( here ),Google 提供了一些相同的范围: https://www.googleapis.com/auth/calendar读/写访问到日历 https://www.google
我使用的是JAWS v2023.2212.23,我有一个div容器,里面有段落和列表。我的要求是,当我专注于div容器时,JAWS应该读取整个块。。对于演示角色,它将只读第一段。。谁能帮我理解所有咏叹
我有一个单选按钮控件,其中有两个项目。 Add A Delete D 我想在条件 X 上仅禁
一、Reactive api 下面我们可以一个例子 如图所示,当我们点击button按钮的时候,是没有响应式效果的,此时我们需要reactive api。 那么这是什么原因呢?为什么就可以变成响应式的
我正在寻找一种在ng-readonly语句中调节ng-if的方法..我尝试了几种方法,这是我的最新建议。 ng-if="note.owner_image === user.image " ng-re
我是一名优秀的程序员,十分优秀!