Есть ли способ выполнить несколько операторов SQL, используя ** тот же ** sysdate? - PullRequest
1 голос
/ 28 июня 2011

У меня есть программа, которая выполняет операторы SQL. В рамках транзакции я хотел бы обновить несколько таблиц, используя тот же самый sysdate. например. (выполните следующие 3 оператора в транзакции)

update table1 set some_col = 'updated' where some_other_col < sysdate;
delete from table2 where some_col < sysdate;
insert into table3 (col1, col2) select c1, c2 from table4 where some_col < sysdate;

Если эти 3 оператора выполняются в транзакции, то «sysdate», который использует каждый из них, будет соответствовать той отметке времени, на которой мы сейчас работаем, а не в начале транзакции.

Я мог бы создать хранимую процедуру и изначально выбрать sysdate в переменную, используя PL / SQL, но я бы предпочел просто запустить операторы sql из внешней программы.

Ответы [ 3 ]

5 голосов
/ 28 июня 2011

Я мог бы создать хранимую процедуру и изначально выберите системную дату в переменная, используя PL / SQL, но я бы предпочел просто запустить SQL-операторы из внешняя программа

Использовать анонимный блок вместо хранимой процедуры, что-то вроде (не проверено):

declare
  v_sysdate date := sysdate;
begin
  update table1 set some_col = 'updated' where some_other_col < v_sysdate;
  delete from table2 where some_col < v_sysdate;
  insert into table3 (col1, col2) select c1, c2 from table4 where some_col < v_sysdate;
  commit;
exception
  when others then 
  rollback;
  raise;
end;
0 голосов
/ 28 июня 2011

Какая внешняя программа? Если вы используете SQL * Plus, это будет работать:

var d char(50)
begin select sysdate into :d from dual; end;
/

update table1 set some_col = 'updated' where some_other_col < :d;
delete from table2 where some_col < :d;
insert into table3 (col1, col2) select c1, c2 from table4 where some_col < :d;

Возможно, вам придется изменить настройку NLS_DATE_FORMAT для сеанса ...

0 голосов
/ 28 июня 2011

Боюсь, все работает как положено, время пересчитывается с каждым запросом. Просто сохраните отметку времени в переменной в вашей программе и используйте эту переменную в своих запросах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...