2015-02-01 1 views
1

Прежде всего большое спасибо всем специалистам PERL на этом замечательном веб-сайте; Я так многому научился.PERL DBI: Вставка из .pl в Oracle DB Функция to_date в тестовую переменную

У меня есть небольшая проблема «перевода»;

мой .pl скрипт выполняет эти задачи последовательно:

  1. Почитаю .txt файл (в реальной жизни журнала)
  2. регулярное выражение чистит и хранить в памяти переменных некоторую информацию
  3. при чтении строки по строке он вставляет в таблицу Oracle
  4. Выход и отключение при завершении изящно.

Таблица имеет 8 столбцов и один из этой даты магазина и времени события и формат, который я объявлен в SQL является:

DATETIME_EVENT VARCHAR2(255 BYTE) DEFAULT NULL NOT NULL 

вы можете ясно видеть, куда я иду в немного ....

так указать 3 выше выполнить этот блок:

my $sth = $dbh->prepare('INSERT INTO myTable(TIME_ISSUE,col2,col3,col4,col5,col6,col7,col8) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'); 

Пример вставляемых: 2014-09-19 00: 03: 58,562

Все гладко и хорошо, однако я буду выполнять множество запросов позже; но мне придется переводить с помощью функции to_date в SQL, чтобы интерпретировать столбец TIME_ISSUE в качестве типа времени tat.

AS:

select to_date(SUBSTR(TIME_ISSUE,0,19) ,'YYYY-MM-DD HH24:MI:SS') from myTable; 

ВЫВОД: 19/09/2014 23:59:56

Если я создаю table.column как тип даты и времени, как я могу писать блок Perl вставки выше для того, вставить txt в тип datetime?

Я пытался, но не работает на всех:

my $sth = $dbh->prepare('INSERT INTO REQUEST (TO_DATE(SUBSTR(DATETIME_EVENT ,0,19), 'YYYY-MM-DD HH24:MI:SS'),LOG_LEVEL,LOGONID, CLIENTID, USERID,IPADDRESS,DURATION,CLASSMETHOD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)') 

P.S.

можно предположить, что, если я запустить Perl выше я ранее создал эту колонку, как это:

TIME_ISSUE DATE DEFAULT NOT NULL      

ответ

1

CPAN имеет DateTime::Format::Oracle и DateTime::Format::DBI модули для этого.

+0

Привет, Роб, как это применяется в моем случае, похоже, что я должен объявить первый тип date_time объявления в моем pl scrpt? – HashGuy81

+0

На самом деле, этот модуль может быть лучше http://search.cpan.org/~cfaerber/DateTime-Format-DBI-0.041/lib/DateTime/Format/DBI.pm Красивый фрагмент кода на самом верху. –

1

Вы также можете изменить формат даты для сеанса.Это полезно, например, в Perl DBI, где функция to_date() не доступен:

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' 

Вы можете навсегда установить по умолчанию nls_date_format а:

ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' 

В Perl DBI вы можете эти команды запускаются с помощью метода Do():

$db->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'); 

http://www.dba-oracle.com/t_dbi_interface1.htm https://community.oracle.com/thread/682596?start=15&tstart=0