2013-11-19 1 views
0

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

Когда я хочу изменить запись, мне нужно поместить текущую запись в историческую таблицу и добавить автора, дату изменения и комментарий об изменении.

Вот определение моих таблиц

запись (record_id, имя, домен и т.д. ...) records_h (hist_id, автор, комментарий, modification_date, record_id, имя, домен и т.д. ...)

Я взглянул на документацию W3C и нашел this. В примерах не показано, как добавить значения к этому методу, и я не нашел, как это сделать через Google.

Вот что я сделал, но это не работает:

INSERT INTO record_h 
    (hist_id, USER_COMMENT, AUTHOR, MODIFICATION_DATE, record_id, name, domain, etc...) 
SELECT hist_id.nextval, 'test', 'toto', CURRENT_TIMESTAMP, 331898, * 
FROM record 
WHERE record_id=331898; 

Можете ли вы мне помочь?

+0

Каким образом он не работает? – Tobberoth

+0

«* Это не работает *» не является допустимым сообщением об ошибке в Oracle. –

+0

Вы можете использовать псевдоним для записи таблицы r и использовать как r. * В запросе выбора. – ajmalmhd04

ответ

1

Попробуйте это:

INSERT INTO 
     RECORD_H (HIST_ID, 
       USER_COMMENT, 
       AUTHOR, 
       MODIFICATION_DATE, 
       RECORD_ID, 
       NAME, 
       DOMAIN) 
    (SELECT 
      HIST_ID.NEXTVAL, 
      'test', 
      'toto', 
      CURRENT_TIMESTAMP, 
      331898 
    FROM 
      RECORD 
    WHERE 
      RECORD_ID = 331898); 

не использовать * в вашем выборе, имя колонки. Выбор должен быть заключен с использованием()

+0

Его не должно включать запрос выбора в() – ajmalmhd04

+0

Существует абсолютно ** нет ** требование заключить 'select' с круглыми скобками. –

+0

Да, я согласен. Его больше для удобочитаемости. – SriniV

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