Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Преобразовать дату с строку понятную Ораклу  [new]
OpenQuery
Guest
У меня есть:
1. табличка note_table c с двумя полями note_name и create_date
2. процедура, которая из этой таблички вытаскивает данные и записывет в аналогичную таблицу на другом сервере (причём это сервер работает под Oracle, а наша табличка лежит на MS SQL Server 2008 R2)
DECLARE 
    @NoteName VARCHAR(13),
    @DateCreate date
		
    DECLARE curNMK CURSOR 
    FOR	
        SELECT n.note_name, n.create_date FROM note_table n order by n.create_date

    OPEN curNMK
    FETCH NEXT FROM curNMK INTO @NoteName, @DateCreate
	
    WHILE @@FETCH_STATUS=0
    BEGIN			 	
        DECLARE @SQL VARCHAR(1000)
        SELECT @SQL= 'insert into OPENQUERY(oraserv, ''select s111 from ora_note_table'') values ('''+rtrim(ltrim(@NoteName))+''')'
        EXEC(@SQL)
        FETCH NEXT FROM curNMK INTO @NoteName, @DateCreate
    END --WHILE @@FETCH_STATUS=0
	
    CLOSE curNMK
    DEALLOCATE curNMK


Собственно все работает, но мне надо ещё в таблицу ora_note_table в поле s116 записать переменную @DateCreate. Не получается преобразовать дату в текстовый вид, чтоб в таблице Оракла всё нормально отобразилось.

Может кто-нибудь помочь передать ораклу дату?
18 мар 13, 14:50    [14062817]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
OpenQuery,

а что, Oracle не понимает стандартное представление 'YYYY-MM-DDThh:mm:ss.nnn' ?
18 мар 13, 14:53    [14062834]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
+
если бы у меня в БД кто-то поля так называл, я бы долго матерился
18 мар 13, 14:53    [14062835]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Или 'YYYYMMDD'?
18 мар 13, 14:54    [14062839]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
to_date() оракловую ф-ю используйте
18 мар 13, 14:57    [14062871]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
Glory
Member

Откуда:
Сообщений: 104751
OpenQuery
Собственно все работает, но мне надо ещё в таблицу ora_note_table в поле s116 записать переменную @DateCreate. Не получается преобразовать дату в текстовый вид, чтоб в таблице Оракла всё нормально отобразилось.

Может кто-нибудь помочь передать ораклу дату

Не надо ничего преобразовывать
Используйте EXEC ... AT c маппингом параметров
18 мар 13, 15:42    [14063048]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
может лучше параметрами?

DECLARE 
    @NoteName VARCHAR(13),
    @DateCreate date
		
    DECLARE curNMK CURSOR 
    FOR	
        SELECT n.note_name, n.create_date FROM note_table n order by n.create_date

    OPEN curNMK
    FETCH NEXT FROM curNMK INTO @NoteName, @DateCreate
	
    WHILE @@FETCH_STATUS=0
    BEGIN			 	
        DECLARE @SQL VARCHAR(1000)

        EXEC('insert into ora_note_table(s111, s116 ) values (?, ?)', @NoteName, @DateCreate) at oraserv
        FETCH NEXT FROM curNMK INTO @NoteName, @DateCreate
    END --WHILE @@FETCH_STATUS=0
	
    CLOSE curNMK
    DEALLOCATE curNMK

есть подозрение, что он серваки сами договорятся о типах
18 мар 13, 15:42    [14063049]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
Гость333
Member

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

Выкиньте курсор и вставляйте все данные за один присест:
INSERT INTO oraserv..СХЕМА.ORA_NOTE_TABLE(s111, s116)
SELECT rtrim(ltrim(n.note_name)), n.create_date
FROM note_table n
18 мар 13, 16:05    [14063195]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
OpenQuery
Guest
HandKot, спасибо. ничего не правил Ваш код вставил, всё перебросилось как надо
19 мар 13, 06:45    [14065238]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
OpenQuery
HandKot, спасибо. ничего не правил Ваш код вставил, всё перебросилось как надо

а вариант от Гость333 чем Вас не устраивает?
я бы тоже избавился от курсора по возможности
19 мар 13, 08:10    [14065298]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
OpenQuery
Guest
HandKot, потому как пишет, что oraserv.СХЕМА.ORA_NOTE_TABLE есть invalid_object. Хотя cxema на oraserv существует.
20 мар 13, 13:33    [14071941]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
Гость333
Member

Откуда:
Сообщений: 3683
OpenQuery
пишет, что oraserv.СХЕМА.ORA_NOTE_TABLE есть invalid_object

В моём скрипте между oraserv и СХЕМА было две точки, а не одна.
20 мар 13, 13:47    [14072010]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
OpenQuery
Guest
Гость333, с двумя, процедура не компилируется.
The Ole DB provider "OraOLEDB.Oracle" for linked server "oraserv" does not contain ""cxema"."ora_note_table"". The table eithet does not exist or the current user does not have permissions on the table.
20 мар 13, 13:53    [14072050]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
Гость333
Member

Откуда:
Сообщений: 3683
OpenQuery
The Ole DB provider "OraOLEDB.Oracle" for linked server "oraserv" does not contain ""cxema"."ora_note_table"". The table eithet does not exist or the current user does not have permissions on the table.

Напишите имя схемы и имя таблицы заглавными буквами (точнее, ровно в том регистре, в каком это существует в Oracle). Забыл упомянуть этот момент, тоже наткнулся на это.
20 мар 13, 13:58    [14072089]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать дату с строку понятную Ораклу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
OpenQuery
HandKot, потому как пишет, что oraserv.СХЕМА.ORA_NOTE_TABLE есть invalid_object. Хотя cxema на oraserv существует.

если через exec () at ... работает значит объект есть

согласен с Гость333 , проверьте написание с учетом регистра и таблицы и схемы.

поищите ее здесь

EXEC sp_tables_ex @table_server = 'oraserv', 
@table_catalog = null, 
@table_schema = null, 
@table_type = 'TABLE'
20 мар 13, 16:07    [14072870]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить