更新插入查询

时间:2016-12-08 12:16:49

标签: sql database stored-procedures oracle11g oracle10g

我是db的新手,所以我的问题可能不对。

我试图实现的是从表中获取行,编辑两列并插入到同一个表中。

INSERT INTO table_name 
    (SELECT * 
     FROM table_name 
     WHERE TRANSACTION_ID = 1 );

但在添加插入之前我想更新字段

UPDATE table_name 
SET UPDATED_DATE = '20161208', 
    STATUS = 'updated' 
WHERE TRANSACTION_ID = 1;

我是否需要编写存储过程来实现此目的?

如果是这样的话应该如何?

3 个答案:

答案 0 :(得分:4)

您正在学习数据库。当您使用INSERT时,您应该始终列出列,除非您确切知道自己在做什么。因此,列出显式列并输入您想要的值:

INSERT INTO table_name( . . ., UPDATED_DATE, STATUS)
    SELECT . . ., '20161208', 'updated'
    FROM table_name
    WHERE TRANSACTION_ID = 1;

您可以在一个声明中执行此操作。

答案 1 :(得分:0)

存储过程通常用于SQL操作(可重用代码),需要通过传递给它的动态值(如果需要)重复执行。

如果您只想在一次更新操作中运行这两个查询,则不建议使用存储过程。您可以将这两个命令作为单个事务运行,并将事务提交为单个Atomic事务。

答案 2 :(得分:0)

您想要实现的是在表格中复制一行并修改此重复行的某些字段?

如果是这样,你需要做这样的事情(不要把TRANSACTION_ID放在字段列表中。如果你有Identity,它通常会自动创建一个ID_TRANSACTION 2):

INSERT INTO TableName (field1, field2, ...)
SELECT * FROM table_name WHERE TRANSACTION_ID = 1

然后:

UPDATE table_name SET UPDATED_DATE = '20161208', STATUS = 'updated' WHERE TRANSACTION_ID = 2;