powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / parse SQL statement
9 сообщений из 9, страница 1 из 1
parse SQL statement
    #32759973
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интеграция, блин ...

программка работает так: получает sql-statement и исполняет его.

например такой statement:
update test set ( f1, f2, f3 ) = ( 'f1', 'f2', 'f3' ) where f1 = 'f1'
могу сказать что он работает в db2 на любой платформе, как и программка.


а когда я переделал программку под oracle, она перестала работать.
потому что oracle (9) такой syntax не понимает. в начале проекта никакого oracle не было...

чтоб применить его не оracle, нужно изменить таким образом:
update test set ( f1, f2, f3 ) = ( select 'f1', 'f2', 'f3' from dual ) where f1 = 'f1'.
в добавок там еще геморрой с типами данных.

нужно преобразовать db2 запрос в oracle запрос.

хочу доку, как это сделать. в лоб решать задачу как то совсем не радостно...
...
Рейтинг: 0 / 0
parse SQL statement
    #32760224
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--update test set ( f1, f2, f3 ) = ( select 'f1', 'f2', 'f3' from dual ) where f1 = 'f1'.

достаточно если ты приведешь к SQL-92 виду :

update test set f1 ='f1', f2='f2', f3 ='f3' where f1 = 'f1'.

это будет работать везде
...
Рейтинг: 0 / 0
parse SQL statement
    #32761895
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это да. типы данных не везде будут пониматься. там дата-время.

хотя в оракуле можно выкрутиься:
alter session set NLS_DATE_FORMAT='YYYY.MM.DD';
alter session set NLS_TIMESTAMP_FORMAT='YYYY-MM-DD-HH.MI.SS.FF';
...

все равно нужно этот statement переделывать :)
и где-нибудь поближе о оракулу, чтоб не затронуть всю систему....
...
Рейтинг: 0 / 0
parse SQL statement
    #32764087
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для SQl-92 тоже есть универсальный подход. YYYYMMDD все сервера понимают тоже однозначно.

А вот то что в тупую не запустить это точно. весь код разбирать ручками придется.
...
Рейтинг: 0 / 0
parse SQL statement
    #32766388
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так кто-нибудь умеет парсить SQL? дайте ссылкок pls. по диаграммам из SQL референсе что-то очень уж долго, да и напрягает...
...
Рейтинг: 0 / 0
parse SQL statement
    #32767245
джиммерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А причём здест Parse ?
...
Рейтинг: 0 / 0
parse SQL statement
    #32767462
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нипонил
...
Рейтинг: 0 / 0
parse SQL statement
    #32767571
Фотография nex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на каком языке сама программка написанна? Я просто думаю может быть тут лучше что-то типа PreparedStatment (Java) или OleDbParameter (.NET) использовать? Чего ты собственно говоря отпарсить хочешь?
...
Рейтинг: 0 / 0
parse SQL statement
    #32767584
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DB2 ESQL -> ORACLE PRO*C/C++

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
UPDATE 
OWNER           .TABLE               
SET
 (  ID1           ,  ID1            ,  ID3          ,  NUM             ,  NAME              ,  DATE1           ,  DATE1           ,  DATE3           ,  DATE4           , DATE5              )
 = 
(   4896 ,   76 ,   18 ,   25 ,  '25',  '2004-06-13-08.06.09.825000',  NULL,  DATE('2004-06-11'),  NULL,  NULL   ) 
 WHERE  
ID1            =   4896 

преобразовать в

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
UPDATE 
OWNER              .TABLE               
SET  
ID1    =  4896        , 
 ID2   =  76          ,
  ID3  =   18        , 
 NUM  =  25            ,
  NAME   = '25'            ,
  DATE1 =    '2004-06-13-08.06.09.825000'       , 
 DATE2  =  NULL         ,
  DATE3  = TO_DATE('2004-06-11', 'YYYY-MM-DD')    ,
  DATE4  =  NULL         ,
 DATE5 = NULL  
WHERE  
ID1            =   4896 

на лету.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / parse SQL statement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]