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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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