Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Некорректная вставка даты через Oralce_client10g_home  [new]
Repo_63ru
Member

Откуда:
Сообщений: 19
Добрый день!
Возникла проблема с передачей времени сделок с Квика через QuikExporter во внешнюю базу данных SoftWell. Во внешнюю БД время сделки TRADE_TIME попадает как 01.01.1900. В настройках QuikExporter в Export.ini указано експортировать время TimeFormat=2 ("2" - <ЧЧ:ММ:СС>). Включили в QuikExporter режим расширенного логгирования, с помощью которого в логе видим insert передаваемый в ODBC-драйвер.
+ Пример запроса:

INSERT INTO Trades (TRADE_SEC,
TRADE_SECCODE,
TRADE_DATE,
TRADE_CLASSCODE,
TRADE_CLASS,
TRADE_FIRMID,
TRADE_PARTNER_FIRMID,
TRADE_PARTNER_USERID,
TRADE_ORDER_NUMBER,
TRADE_PRICE,
TRADE_VALUE,
TRADE_YIELD,
TRADE_QUANTITY,
TRADE_ACCOUNT,
TRADE_REF,
TRADE_USERID,
TRADE_SETTLE_CODE,
TRADE_SIDE,
TRADE_TYPE,
TRADE_ACRUEDINT,
TRADE_ACRUEDINT2,
TRADE_REPO_RATE,
TRADE_RANSOM_VALUE,
TRADE_TIME,
TRADE_REPO_TERM,
TRADE_NUMBER)
VALUES ('ЕАБР06 [РПС: Первичное размещение облигаций]',
'RU000A0JS8Y1',
'02.10.2013',
'PSAU',
'РПС: Первичное размещение облигаций',
'SC0197200000',
'MC0005500000',
NULL,
10047359057.000000,
100.000000,
75000000.000000,
8.000000,
75000,
'S01-00000F00',
NULL,
'SU0197200034',
'T0',
'Купля',
NULL,
0.000000,
0.000000,
0.000000,
0.000000,
'14:31:14',
0,
2303171340.000000)


Включили трассировку сессии и увидели следующую картину:

+ Пример трассировки:

PARSING IN CURSOR #139954462710456 len=497 dep=0 uid=103 oct=2 lid=103 tim=1381300993982707 hv=2816607537 ad='11e89b7b8' sqlid='8prusdamy419j'
insert into Trades (TRADE_SEC,TRADE_SECCODE,TRADE_DATE,TRADE_CLASSCODE,TRADE_CLASS,TRADE_FIRMID,TRADE_PARTNER_FIRMID,TRADE_PARTNER_USERID,TRADE_ORDER_NUMBER,TRADE_PRICE,TRADE_VALUE,TRADE_YIELD,TRADE_QUANTITY,TRADE_ACCOUNT,TRADE_REF,TRADE_USERID,TRADE_SETTLE_CODE,TRADE_SIDE,TRADE_TYPE,TRADE_ACRUEDINT,TRADE_ACRUEDINT2,TRADE_REPO_RATE,TRADE_RANSOM_VALUE,TRADE_TIME,TRADE_REPO_TERM,TRADE_NUMBER) values (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26)
END OF STMT
BINDS #139954462710456:

*** 2013-10-09 11:12:53.774
WAIT #139954462710456: nam='SQL*Net message from client' ela= 2001577 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=1381302773774776
BINDS #139954462710456:
Bind#0
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0ee8350 bln=4000 avl=27 flg=05
value="ГІ· ±02 [Аµїѕ-ј: ѕСЫШУРжШШ]"
Bind#1
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0ee7370 bln=4000 avl=12 flg=05
value="RU000A0JU0T4"
Bind#2
oacdty=12 mxl=07(07) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=8 off=0
kxsbbbfp=7f49b0d417a0 bln=07 avl=07 flg=05
value="10/9/2013 0:0:0"
Bind#3
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0d6c060 bln=4000 avl=04 flg=05
value="RPMO"
Bind#4
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0d6b080 bln=4000 avl=17 flg=05
value="Аµїѕ-ј: ѕСЫШУРжШШ"
Bind#5
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0ee56a0 bln=4000 avl=12 flg=05
value="SC0197200000"
Bind#6
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0ee46c0 bln=4000 avl=12 flg=05
value="MC0164300000"
Bind#7
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0ee36e0 bln=4000 avl=00 flg=05
Bind#8
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=56 off=0
kxsbbbfp=7f49b0d41750 bln=08 avl=08 flg=05
value=1.009180974E+010D
Bind#9
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=8
kxsbbbfp=7f49b0d41758 bln=08 avl=08 flg=01
value=9.4964200000000005E+001D
Bind#10
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=16
kxsbbbfp=7f49b0d41760 bln=08 avl=08 flg=01
value=1.899284E+007D
Bind#11
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=24
kxsbbbfp=7f49b0d41768 bln=08 avl=08 flg=01
value=1.3869999999999999E+001D
Bind#12
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=32
kxsbbbfp=7f49b0d41770 bln=22 avl=02 flg=01
value=20000
Bind#13
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0ee1c88 bln=4000 avl=12 flg=05
value="S01-00000F00"
Bind#14
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b0ee0ca8 bln=4000 avl=00 flg=05
Bind#15
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b00b1e68 bln=4000 avl=12 flg=05
value="SU0197200056"
Bind#16
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b00b0e88 bln=4000 avl=02 flg=05
value="S0"
Bind#17
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b00afea8 bln=4000 avl=05 flg=05
value="єгЯЫп"
Bind#18
oacdty=01 mxl=4000(4000) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000010 frm=01 csi=35 siz=4000 off=0
kxsbbbfp=7f49b00aeec8 bln=4000 avl=00 flg=05
Bind#19
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=72 off=0
kxsbbbfp=7f49b0d416f0 bln=08 avl=08 flg=05
value=4.094E+005D
Bind#20
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=8
kxsbbbfp=7f49b0d416f8 bln=08 avl=08 flg=01
value=4.142E+005D
Bind#21
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=16
kxsbbbfp=7f49b0d41700 bln=08 avl=08 flg=01
value=5.8499999999999996E+000D
Bind#22
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=24
kxsbbbfp=7f49b0d41708 bln=08 avl=08 flg=01
value=1.940534E+007D
Bind#23
oacdty=12 mxl=07(07) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=32
kxsbbbfp=7f49b0d41710 bln=07 avl=07 flg=01
value="1/1/1900 11:13:31"
Bind#24
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=40
kxsbbbfp=7f49b0d41718 bln=22 avl=02 flg=01
value=1
Bind#25
oacdty=101 mxl=08(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=07 fl2=1000000 frm=00 csi=00 siz=0 off=64
kxsbbbfp=7f49b0d41730 bln=08 avl=08 flg=01
value=2.304701547E+009D


Таким образом мы видим, что в запросе идёт формат времени сделки в виде параметра value="1/1/1900 11:13:31", зачем-то приплюсовалась дата. В итоге в табличку вместо времени записывается вот это значение TRADE_TIME = 01.01.1900
Вопрос, как победить ?
14 окт 13, 09:49    [14964797]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная вставка даты через Oralce_client10g_home  [new]
eev
Member

Откуда: -
Сообщений: 1156
Repo_63ru,

Потому что нет типа время. Берите эту дату/время и работайте только со временем
14 окт 13, 10:01    [14964846]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная вставка даты через Oralce_client10g_home  [new]
Repo_63ru
Member

Откуда:
Сообщений: 19
Есть ещё один интересный момент. Если я выполню этот запрос через IBExpert через ODBC Viewer (ODBC подключение) или SQL Navigator (прямое подключение), TOAD (прямое подключение), то время вставляется корректно.
14 окт 13, 10:03    [14964857]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная вставка даты через Oralce_client10g_home  [new]
Repo_63ru
Member

Откуда:
Сообщений: 19
Поддержка Квика высказывала следующие предположения:

"Проблема заключается в том что экспортер не может определить тип поля в таблице (возможно не хватает прав на получение информации о структуре). Из-за чего использует тип по умолчанию для этого поля (datetime). Драйвер ODBC в свою очередь конвертирует в строку с учетом года."

Мы дали права администратора пользователям оракл, но это не помогло. И почему выполняя запрос вручную (мой пост выше) время вставляется корректно ?
14 окт 13, 10:17    [14964912]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная вставка даты через Oralce_client10g_home  [new]
eev
Member

Откуда: -
Сообщений: 1156
Repo_63ru,

Ну вставляйте через них))). тулзы это тулзы. Кстати, а вы не думали, что это квик сам дату ставит.
какой тип у трейд тайм
14 окт 13, 10:20    [14964928]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная вставка даты через Oralce_client10g_home  [new]
Repo_63ru
Member

Откуда:
Сообщений: 19
eev,

не, там поток сделок идёт, для этого и используется квикэкспортер =)
Сразу скажу, что я не спец и не программист, поэтому могу путаться и говорить не по терминологии. Но, как я понял, тип поля в табличке назначения - VARCHAR.
14 окт 13, 10:47    [14965115]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная вставка даты через Oralce_client10g_home  [new]
eev
Member

Откуда: -
Сообщений: 1156
Repo_63ru
eev,

не, там поток сделок идёт, для этого и используется квикэкспортер =)
Сразу скажу, что я не спец и не программист, поэтому могу путаться и говорить не по терминологии. Но, как я понял, тип поля в табличке назначения - VARCHAR.

бадайте сапорт. их решение - их косяки
14 окт 13, 11:52    [14965692]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить