2016-12-08 4 views
0

Я новичок в 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; 

Мне нужно написать хранимую процедуру для достижения этого?

Если да, то как это должно быть?

+0

Не требуется хранимая процедура. Вы хотите, чтобы строки добавлены в таблицу, затем выполните 'INSERT INTO t SELECT c1, литералы и т. Д. FROM t'. Просто просто ОБНОВЛЯЙТЕ. – jarlh

ответ

4

Вы изучаете базы данных. Когда вы используете INSERT, вы должны всегда перечислять столбцы, если вы точно не знаете, что делаете. Итак, перечислите явные столбцы и введите значения, которые вы хотите:

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

Вы можете сделать это в одном заявлении.

0

Хранимые процедуры обычно используются для операций SQL (многоразовый код), которые необходимо выполнять повторно с передаваемыми им динамическими значениями (при необходимости).

Если вы просто хотите запустить эти 2 запроса для однократной операции обновления, хранимая процедура не рекомендуется. Вы можете запускать эти 2 команды как одну транзакцию и совершать транзакцию как одну транзакцию Atomic.

+0

Но я хочу обновить два поля перед вставкой назад. Будет ли это делать одна транзакция? или он будет принимать все записи с помощью TRANSACTION_ID = 1 и обновлять? – RDD

0

Что вы хотите добиться, это дублировать строку в вашей таблице и изменить некоторые поля этой дублированной строки?

Если да, то вам нужно сделать что-то вроде этого (не ставьте TRANSACTION_ID в списке полей Обычно он должен автоматически создать в 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; 
+0

Нет необходимости в дополнительном обновлении. Просто укажите значения в списке SELECT INSERT. – jarlh

+0

@REK вы поняли, что я хотел сделать, но в моем случае значение TRANSACTION_ID не является уникальным идентификатором, моя таблица будет иметь 2 записи в файле TRANSACTION_ID, а когда я дублирую, он создаст еще 2 записи с одним и тем же идентификатором TRANSACTION_ID. По этой причине я не могу использовать ваше решение. – RDD

 Смежные вопросы

  • Нет связанных вопросов^_^