Текущее время: Сб, авг 23 2025, 08:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Загрузка данных из ORACLE
СообщениеДобавлено: Чт, мар 05 2009, 10:52 
Начинающий
Начинающий

Зарегистрирован:
Чт, мар 05 2009, 10:45
Сообщения: 1
Здравствуйте,
При загрузке данных через DB Connect в SAP столкнулся с такой проблемой.
Формат поля Дата в БД ORACLE DATE 7, при просмотре PSA выводится какая то ерунда. У меня только доступ к базе в ней изменять ничего не могу.
Как можно преобразовать поле Дата?
При трансформации в подпрограмме переноса просто не понятно как разделить ДД.ММ.ГГГГ.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка данных из ORACLE
СообщениеДобавлено: Чт, мар 05 2009, 12:48 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 08 2006, 22:57
Сообщения: 81
Пол: Мужской
я это сделал так:
1. загрузил все поля тип дата в BW
2. изменил в BADI IF_EX_RSDBC_SQL_STATEMENT~SQL_STATEMENT_ORA SQL запрос

и вроде всё работает.

Алтернатива:
заложитьь в оракле для таблиц VIEW и изменить поля с датами
CREATED --> TO_CHAR(CREATED,'YYYYMMDD')

в общем то это и делает BADI


ABAP для 1:
=========

*&---------------------------------------------------------------------*
*& Report ZBW_GET_SIEBEL_FIELDS001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*


REPORT zcrm_evocs_get_siebel_fields1.

DATA: lv_ow(05).
DATA: lv_tn(30).
DATA: lv_cn(30).
DATA: lv_dt(10).
DATA: lv_dm(10).
DATA: lv_do(10).
DATA: lv_dl(10) TYPE n.
DATA: lv_dp(10) TYPE n.
DATA: lv_ds(10) TYPE n.
DATA: lv_nu(10).
DATA: lv_ci(10) TYPE n.
DATA: ls_fd TYPE rsdssegfd.
DATA: ls TYPE zbw_ora_fields.

DEFINE af.
clear: ls.
ls-mandt = sy-mandt.
ls-type1 = 'D'.
ls-field = &1.
ls-tabl1 = &2.
modify zbw_ora_fields from ls.
END-OF-DEFINITION.

*Create connection to Oracle
INCLUDE zcrm_evocs_incl_connect_siebel.

*Delete data from the table
DELETE FROM zbw_ora_fields.
COMMIT WORK AND WAIT.


*SELECT
EXEC SQL PERFORMING WRITE.
SELECT
T.OWNER,
T.TABLE_NAME,
T.COLUMN_NAME,
T.DATA_TYPE,
T.DATA_TYPE_MOD,
T.DATA_TYPE_OWNER,
T.DATA_LENGTH,
T.DATA_PRECISION,
T.DATA_SCALE,
T.NULLABLE,
T.COLUMN_ID
FROM ALL_TAB_COLUMNS T
WHERE OWNER = 'SIEBEL'
AND DATA_TYPE = 'DATE'
INTO :LV_OW, :LV_TN, :LV_CN, :LV_DT, :LV_DM, :LV_DO, :LV_DL, :LV_DP, :LV_DS, :LV_NU, :LV_CI
ENDEXEC.

*Save data in the table
COMMIT WORK AND WAIT.


* Add other fields
PERFORM add_fields.


*Save data in the table
COMMIT WORK AND WAIT.

SET EXTENDED CHECK ON.


*&---------------------------------------------------------------------*
*& Form write
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write.

af lv_cn 'SIEBEL'.

ENDFORM. "WRITE:/




*&---------------------------------------------------------------------*
*& Form ADD_FIELDS
*&---------------------------------------------------------------------*
FORM add_fields .

CLEAR: ls_fd.
SELECT * FROM rsdssegfd INTO ls_fd
WHERE datasource LIKE '6%'
AND datatype = 'DATS'.

af ls_fd-fieldnm 'VIEWS'.

ENDSELECT.


ENDFORM. " ADD_FIELDS

ABAP для 2:
==========


*&---------------------------------------------------------------------*
*& Report ZCRM_EVOCS_BADI_SQL_CHANGE_001
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& ABAP ändert SQL-Anfrage via BADI
*&
*& IF_EX_RSDBC_SQL_STATEMENT~SQL_STATEMENT_ORA
*&
*& Extraktion: FULL
*&
*& Bemerkung: es wird SQL-Anfrage geändert und zwar:
*& 1.Es werden Typen von Felder geprüft ( via Table zbw_ora_fields
*&
*&---------------------------------------------------------------------*
*& *
*& *
*& *
*& Created: 19.11.2008 from Jouri POPOV +49 177 2382456 *
*& Changes: 99.99.9999 from XXXXXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXXXXXX *
*& Reasons XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *
*& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *
*& *
*& Request: RWE Proekt: EvoCs *
*& *
*& *
*&---------------------------------------------------------------------*

REPORT zcrm_evocs_badi_sql_change_001.

DATA: gs TYPE string.

CLEAR: gs.
MOVE:
'SELECT ROW_ID , CREATED , CREATED_BY , LAST_UPD , LAST_UPD_BY , DCKING_NUM , MODIFICATION_NUM , BO_ORDQRY_START_ FROM S_ORG_EXT_V4'
TO gs.



WRITE:/ gs.
PERFORM main
CHANGING gs.
WRITE:/ gs.




*&---------------------------------------------------------------------*
*& Form main
*&---------------------------------------------------------------------*
FORM main
CHANGING ls0 TYPE string.

*DATA: ls0 TYPE string.
DATA: ls_sql TYPE string.
DATA: ls1(50).
DATA: ls2(50).
DATA: ls3(50).
DATA: lv_count TYPE i.
DATA: lv_tabix TYPE sytabix.
DATA: lv_feld(30).
DATA: ls_dd03l TYPE dd03l.
DATA: ls TYPE zbw_ora_fields.

CONSTANTS: co_toch(7) VALUE 'TO_CHAR'.
CONSTANTS: co_bra1(1) VALUE '('.
CONSTANTS: co_bra2(1) VALUE ')'.
CONSTANTS: co_coma(1) VALUE ','.
CONSTANTS: co_minu(1) VALUE '-'.
CONSTANTS: co_sep1(1) VALUE ''''.
CONSTANTS: co_sep2(1) VALUE '"'.
CONSTANTS: co_form(8) VALUE 'YYYYMMDD'.

DATA: it TYPE TABLE OF string.

*BREAK-POINT.
*split fields of statement
CLEAR: it, it[].
SPLIT ls0 AT ',' INTO TABLE it.

*describe table + find number of lines in the table
CLEAR: lv_count.
DESCRIBE TABLE it LINES lv_count.

*fine tuning + save for first line
CLEAR: ls0.
CLEAR: ls1. "SELECT
READ TABLE it INTO ls0 INDEX 1.
SPLIT ls0 AT ' ' INTO ls1 ls0.
SHIFT ls0 RIGHT.
MODIFY it FROM ls0 INDEX 1.

*fine tuning + save for last line
CLEAR: ls0.
CLEAR: ls2. "FROM
CLEAR: ls3. "TABLE
READ TABLE it INTO ls0 INDEX lv_count.
SHIFT ls0 LEFT.
SPLIT ls0 AT ' ' INTO ls0 ls2 ls3.
SHIFT ls0 RIGHT.
MODIFY it FROM ls0 INDEX lv_count.

* BREAK-POINT.
* replace Date-Fields with SQL REPLACE '-' --> SPACE
CLEAR: ls0.
LOOP AT it INTO ls0.
CLEAR: lv_tabix.
lv_tabix = sy-tabix.
CLEAR: lv_feld.
lv_feld = ls0.
TRANSLATE lv_feld USING '" '.
SHIFT lv_feld LEFT DELETING LEADING space.




************************************************
*****************************************
**********************************
*****************************
***********************
*******************
*TRANSFORMATION*
**********
***

* determine id Data-Field (DATS)
CLEAR: ls.
SELECT SINGLE * FROM zbw_ora_fields INTO ls
WHERE type1 = 'D'
AND field = lv_feld.

IF sy-subrc = '0'.

CONCATENATE
co_toch
co_bra1
ls0
co_coma
co_sep1 co_form co_sep1
co_bra2
INTO
ls0.

CONDENSE ls0 NO-GAPS.
SHIFT ls0 RIGHT.
CONCATENATE
ls0
' '
INTO
ls0 SEPARATED BY space.
MODIFY it FROM ls0 INDEX lv_tabix.

ENDIF.

CLEAR: ls0.
ENDLOOP.

*build the SQL-statement again
CLEAR: ls_sql.
MOVE: ls1 TO ls_sql.

CLEAR: ls0.
LOOP AT it INTO ls0.
CLEAR: lv_tabix.
lv_tabix = sy-tabix.

IF lv_tabix = 1.
CONCATENATE
ls_sql
ls0
INTO
ls_sql.
ELSE.
CONCATENATE
ls_sql
co_coma
ls0
INTO
ls_sql.
ENDIF.
CLEAR: ls0.
ENDLOOP.

CONCATENATE
ls_sql
ls2
ls3
INTO
ls_sql SEPARATED BY space.

CLEAR: ls0.
ls0 = ls_sql.

ENDFORM. "main

с уважением Юрий
www.1SAP1.de


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка данных из ORACLE
СообщениеДобавлено: Пт, мар 06 2009, 10:30 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, дек 23 2008, 17:09
Сообщения: 315
Что-то никакой инфы по этому BAdi не удалось найти. Можно произвольно подменять sql-запрос? :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка данных из ORACLE
СообщениеДобавлено: Пт, мар 06 2009, 15:54 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 08 2006, 22:57
Сообщения: 81
Пол: Мужской
в общем да...
по бади я тоже не нашол доку.... т.к. это сильно зависит от базы данных...
но если вы не сделаете TO_CHAR то будете получать чото типа
12-JAN-0 т.е. обрезанное 12-JAN-09

попробуйте BREAK-POINT в BADI и посмотрите что передаётся в него и из него )))

у меня это выглядит так:

METHOD if_ex_rsdbc_sql_statement~sql_statement_ora.

* BREAK-POINT.

* <",(,)> Translation + Date-Field convertion 20090101 --> 01-JAN-09
PERFORM main IN PROGRAM zbw_siebel_sql_change077
CHANGING c_sql_statement.

* ToChar for Data-Fields
PERFORM main IN PROGRAM zbw_siebel_sql_change001
CHANGING c_sql_statement.

* Log to /tmp/ write
PERFORM main IN PROGRAM zbw_siebel_sql_protok001
USING c_sql_statement.


ENDMETHOD.


JP


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB