问题标签 [dml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2930 浏览

sql - Oracle:从其他表中的值更新表 a 中的列

我正在尝试为我正在编写的应用程序支持多个数据库。该应用程序主要使用 Hibernate,但是当 DML 语句可以在很短的时间内处理它们时,迭代数百万行并单独处理它们是非常低效的。因此,对于某些操作,我需要制定 SQL。我更像是一个 MySQL 人,但到目前为止,我的应用程序与 SQL Server 和 MySQL 一起工作。有一个操作难倒了我,我似乎无法弄清楚如何为 Oracle 构建一些更新查询。我知道,就 Oracle 而言,这可能是一个新手问题,但是当我一直在寻找时,我一定错过了明显的答案......

下面是我如何为 MySQL 编写这种类型的查询:

更新 table1 t1,table2 t2 设置 t1.colA = t2.colA 其中 t1.colB = t2.colB 和 t1.colC = t2.colC

MySQL 有一个很好的结构,您可以在“set”语句之前使用别名指定所有表,这大大简化了语句的其余部分。在 SQL Server 中,我使用 update ... join 来做同样的事情。

在 Oracle 中,我尝试使用 'update table1 set colA = (select ....) where exists (select ....) 语法,但这不起作用 - 它返回一个'子查询返回多行' 错误。我也尝试在语法上使用 merge ... using ... ,但出现“无法从源表中获取一组稳定的行”的错误。

为了进一步解释我想要实现的目标,我有许多查询要执行,其中一些使用 2 个表,一些使用 3 个表。最复杂的需要这样做:

使用 tableC.colC 中的值更新 tableA.colB,其中 tableA.colA = tableB.colA 和 tableB.colB = tableC.colB 用于所有匹配的行。在数据方面,这看起来像这样(之前和之后):

我希望这足够清楚。谁能解释如何为 Oracle 编写这种 DML 查询?对于加分,PostgreSQL 会不会一样?:)

0 投票
2 回答
953 浏览

sql-server - 不带日志记录的 DML 操作 - SQL Server

有什么方法可以在不将其记录到日志文件的情况下进行 DML 操作?

例如,当我在数据库中插入一行时,无论是否使用事务,此操作都将记录在日志文件中。但我不想在日志文件中记录这个操作。

0 投票
2 回答
36623 浏览

sql-server - 如何在 SQL Server 触发器中复制插入、更新、删除的行

如果用户更改 table HelloWorlds,那么我想要“他们所做的操作”,他们做的时间,以及原始行的副本插入到HelloWorldsHistory.

由于列长度,我宁愿避免单独触发插入、更新和删除操作。

我试过这个:

我从未见过插入出现,但我见过更新。我将尝试 3 个单独的触发器,尽管维护列列表不会很有趣。

0 投票
3 回答
939 浏览

sql-server - SQL Server MERGE 命令 - 如果没有任何条件,如何捕获

使用此命令,我们可以指定如下内容:

但是,如果记录不合格,我们如何陷入困境?例如,说 stm.StudentMarks = 100?如果我尝试“ELSE”,我会收到语法错误。

我知道这个命令通常不会以这种方式使用。但如果它能够做到这一点,我就不必使用事务、锁和多个 SQL 语句了。

0 投票
3 回答
221 浏览

sql - 比较 SQL Server 中的两张表并生成 DML 以调整其中一张

我有两张桌子;一个是第二个的旧版本。我想将新字段中的字段添加到第二个字段。有没有一种简单的方法可以做到这一点而无需手动解析字段(有很多)?

同样,我只是添加字段,因此当我将旧表设为最新时,我不必从旧表中删除任何数据。

谢谢!

PS SQL 服务器 2005。

0 投票
2 回答
219 浏览

oracle - 感知 Oracle 中 DML 访问/更新的对象

我正在为我们的数据库中的变化实现依赖系统,例如,对于这个和这个变化,我们需要那个和那个处于这样那样状态的对象。使用 DDL 依赖关系很容易,但我需要知道给定的 DML 子句引用了哪些对象。后者也可以是动态的。

所以问题是:有没有办法说,给定的 DML 代码引用了哪些表?

主要我对那些不会立即在我的数据集上修改表但可能应该在客户端修改它的子句感兴趣,因为我不可能拥有所有的变化。因此,间接的理解方式(例如执行 DML,然后检查哪些表已更改)不是一种选择。

0 投票
3 回答
3106 浏览

sql - 从属插入语句

我有一个关于客户客户(姓名,地址)的数据表,其中包含“John Doe”、“Some Street 123”等行。对于表中的每一行,我想在 Person(id, name) 表中插入一行,在 Address(id, person_id, address) 表中插入一行。

我可以通过为 Customer 中的每一行运行两个插入语句来完成此操作:

但这是低效的。我想批量插入,有点像这样:

0 投票
2 回答
852 浏览

plsql - 为什么 PL/SQL Bulk DML 对于具有父子约束表的大型数据集运行速度变慢?

我一直试图弄清楚为什么这个 PL/SQL 清除脚本对于记录表有几十万或更多记录的数据集运行缓慢。在脚本执行之前,记录表的某个子集被标记为清除 - 大约 75%。

是什么导致 Record_Part 表的删除比其他表花费的时间长得多?是不是因为它位于 3-table 父子层次结构的中间?我是否在索引或约束方面错过了一些知识?我可以做些什么来加快这个定期清除过程?

这是一个 Oracle 10g 数据库。

提前感谢您阅读我的问题。

架构(部分):

  • 记录表是父表
  • Record_Part 表是Record 的子表(Record 有很多Record_Part)
  • Record_Person 是 Record_Part 的子项(Record_Part 有多个 Record_Person)
  • 典型比例为 1:7:9 (record:record_part:record_person)

记录

  • PK-系统ID
  • 物理标识
  • 待办的
  • purge_in_progress

记录_部分

  • PK - Part_pk
  • FK-record_sysid

Record_Person

  • PK-系统ID
  • FK - Part_pk

运行时

50000 条记录条目

  • record_person forall 在 1:40 分钟内完成
  • record_part forall 在 1:20 分钟内完成
  • 记录 forall 在 10 秒内完成

300000 条记录条目

  • record_person forall 在 9 分钟内完成
  • record_part forall 在 2 小时内完成
  • 记录 forall 在 20 分钟内完成

2000000 条记录条目

  • record_person forall 在 1 小时内完成
  • record_part forall 在 13 小时内完成 (!)
  • 记录在 8 分钟内完成

索引和约束 DDL

脚本:( 下面的脚本省略了时间戳打印)

0 投票
14 回答
660598 浏览

mysql - 如何截断外键约束表?

为什么TRUNCATE不起作用mygroup?即使我有ON DELETE CASCADE SET我得到:

错误 1701 (42000):无法截断在外键约束 ( mytest. instance, CONSTRAINT instance_ibfk_1FOREIGN KEY ( GroupID) REFERENCES mytest. mygroup( ID))中引用的表

0 投票
2 回答
1969 浏览

c# - SqlBulkCopy.WriteToServer 挂起 Thread.Abort 被调用但不知道为什么

鉴于:

  • BenchMark让我知道某事何时完成的课程。
  • 一个非常大的 XML 文件 (~120MB),已被解析为多个列表

一些代码:

问题:

在我的本地开发环境中,一切都很好。当我在云中运行此操作时,它会导致它挂起。使用该LogHelper.WriteLogItem方法,我可以看到这个过程的进度。我观察到它随机挂在一张特定的桌子上。不会引发异常,因此不会回滚事务。说它挂在Table2批量插入上。使用 MS SQL Management Studio,我在上运行查询Table3,没有问题(这意味着事务被中止?)Table2Table1

由于它挂起,我将重新运行该过程。这次它挂得更快,所以我可能会得到这样的日志:

...它挂在 Table5 上(因为 BenchMark 从未完成)。我再次运行它,日志的其余部分如下所示:

...它现在挂在这里。

如果有帮助,我正在使用 rackspace 云托管。过去,我可以通过从我的 dbml 文件中删除所有表并读取它们来解决此问题,但这次它不起作用。我想知道正在处理的数据量是否会导致问题?

编辑:此示例中的代码在异步线程中运行。我发现线程因未知原因而中止,我需要找出解决此问题的原因。