Поскольку для отмеченных исключений метод, который их выбрасывает, должен явно указывать этот факт ключевым словом «throws», поэтому, если в вашем блоке нет «throws IOException», у компилятора есть информация, g0] невозможно для исключения IOException, поэтому все, что вы делаете после ловли, было бы недостижимым.
JohnLavoie - Вам не нужно это. ДАТА в Oracle является на самом деле типом данных даты и времени. Единственная разница между ДАТОЙ и МЕТКОЙ ВРЕМЕНИ - то, что ДАТА решает вниз к второй твердости, но твердости МЕТКИ ВРЕМЕНИ вниз к микро секунде. Поэтому Спросить статья Tom совершенно действительна для столбцов TIMESTAMP также.
Статья Tom очень стара. Это только обсуждает тип ДАТЫ. При использовании типов МЕТКИ ВРЕМЕНИ затем, арифметика дат создается в МН / SQL.
http://www.akadia.com/services/ora_date_time.html
DECLARE
ts_a timestamp;
ts_b timestamp;
diff interval day to second;
BEGIN
ts_a := systimestamp;
ts_b := systimestamp-1/24;
diff := ts_a - ts_b;
dbms_output.put_line(diff);
END;
+00 01:00:00.462000
или
DECLARE
ts_b timestamp;
ts_a timestamp;
date_part interval day to second;
BEGIN
ts_a := systimestamp;
date_part := to_dsinterval('0 01:23:45.678');
ts_b := ts_a + date_part;
dbms_output.put_line(ts_b);
END;
04-SEP-08 05.00.38.108000 PM
Я украл большую часть из этого от старой tom статьи несколько лет назад, исправил некоторые ошибки от статьи и очистил ее. Строки разграничения для datediff вычисляются по-другому между оракулом и MSSQL, таким образом, необходимо быть осторожными с некоторыми примерами, плавающими вокруг там, которые правильно не составляют границы стиля MSSQL/Sybase, которые не обеспечивают дробные результаты.
Со следующим необходимо смочь использовать синтаксис MSSQL и получить те же результаты как MSSQL, такие как ИЗБРАННЫЙ DATEDIFF (dd, getdate (), DATEADD (dd, 5, getdate ())) ОТ ДВОЙНОГО;
Я утверждаю только, что это работает - не что его эффективное или лучший способ сделать это. Я не человек Oracle :) И Вы могли бы хотеть думать дважды об использовании моих функциональных макросов к кавычкам необходимости обходного решения вокруг dd, мм, гд, ми.. и т.д.
(обновление Mark Harrison), добавила функция dy как псевдоним для dd.
CREATE OR REPLACE FUNCTION GetDate
RETURN date IS today date;
BEGIN
RETURN(sysdate);
END;
/
CREATE OR REPLACE FUNCTION mm RETURN VARCHAR2 IS BEGIN RETURN('mm'); END;
/
CREATE OR REPLACE FUNCTION yy RETURN VARCHAR2 IS BEGIN RETURN('yyyy'); END;
/
CREATE OR REPLACE FUNCTION dd RETURN VARCHAR2 IS BEGIN RETURN('dd'); END;
/
CREATE OR REPLACE FUNCTION dy RETURN VARCHAR2 IS BEGIN RETURN('dd'); END;
/
CREATE OR REPLACE FUNCTION hh RETURN VARCHAR2 IS BEGIN RETURN('hh'); END;
/
CREATE OR REPLACE FUNCTION mi RETURN VARCHAR2 IS BEGIN RETURN('mi'); END;
/
CREATE OR REPLACE FUNCTION ss RETURN VARCHAR2 IS BEGIN RETURN('ss'); END;
/
CREATE OR REPLACE Function DateAdd(date_type IN varchar2, offset IN integer, date_in IN date )
RETURN date IS date_returned date;
BEGIN
date_returned := CASE date_type
WHEN 'mm' THEN add_months(date_in,TRUNC(offset))
WHEN 'yyyy' THEN add_months(date_in,TRUNC(offset) * 12)
WHEN 'dd' THEN date_in + TRUNC(offset)
WHEN 'hh' THEN date_in + (TRUNC(offset) / 24)
WHEN 'mi' THEN date_in + (TRUNC(offset) /24/60)
WHEN 'ss' THEN date_in + (TRUNC(offset) /24/60/60)
END;
RETURN(date_returned);
END;
/
CREATE OR REPLACE Function DateDiff( return_type IN varchar2, date_1 IN date, date_2 IN date)
RETURN integer IS number_return integer;
BEGIN
number_return := CASE return_type
WHEN 'mm' THEN ROUND(MONTHS_BETWEEN(TRUNC(date_2,'MM'),TRUNC(date_1, 'MM')))
WHEN 'yyyy' THEN ROUND(MONTHS_BETWEEN(TRUNC(date_2,'YYYY'), TRUNC(date_1, 'YYYY')))/12
WHEN 'dd' THEN ROUND((TRUNC(date_2,'DD') - TRUNC(date_1, 'DD')))
WHEN 'hh' THEN (TRUNC(date_2,'HH') - TRUNC(date_1,'HH')) * 24
WHEN 'mi' THEN (TRUNC(date_2,'MI') - TRUNC(date_1,'MI')) * 24 * 60
WHEN 'ss' THEN (date_2 - date_1) * 24 * 60 * 60
END;
RETURN(number_return);
END;
/