Primeiro deve ser configurado no TNS do servidor do SAP a conexão com o oracle.
Apos feito esse procedimento é só adicionar esse nome ao SAP na DBCON.
Abaixo estou enviando as formas utilizando o exec sql.
Existe uma outra forma de efetuar a execução do exec sql que é utilizando classes, essa já e um pouco mais complicada mas é mais interessante pra fazer algo dinamico.
Segue o exemplo que é utiliado na minha empresa.
CON NAME: ORACLE
DBMS ORA
USER NAME sapdes
PASSWORD V01/0014ZctvSB67Wv3u6Yybiy
CON ENV DESENV-RAC
DB RECO
MAX CONNECTIONS 0
OPT CONNECTIONS 0
Abaixo segue alguns comandos do exec sql
Variáveis:
DATA: dbtype TYPE dbcon_dbms,
dbcur TYPE cursor,
exc_ref TYPE REF TO cx_sy_native_sql_error,
error_text TYPE string,
dbs TYPE dbcon-con_name VALUE 'ORACLE'.
Efetuando a conexão com o banco
" Procurar uma conexão oracle.
SELECT SINGLE dbms
FROM dbcon
INTO dbtype
WHERE con_name = dbs.
" Se for uma conexão oracle para DBLINK.
IF dbtype = 'ORA'.
TRY.
" Executar a chamada no dblink "DBGERAL"
EXEC SQL.
CONNECT TO :dbs
ENDEXEC.
CATCH cx_sy_native_sql_error INTO exc_ref.
error_text = exc_ref->get_text( ).
MESSAGE error_text TYPE 'E'.
ENDTRY.
ELSE.
MESSAGE 'Não foi encontrado uma conexão oracle' TYPE 'E'.
ENDIF.
Exemplo de Select
CLEAR: wa_fat_status.
REFRESH it_fat_status.
TRY.
" Verificar termino do faturamento
EXEC SQL.
OPEN dbcur FOR
SELECT setor_atividade,
tp_nota,
to_char(dt_faturamento, 'yyyymmdd'),
to_char(dt_boleto, 'yyyymmdd'),
status,
to_char(dt_inclusao, 'yyyymmdd')
FROM ZSAP_FAT_STATUS
ENDEXEC.
" Comandos para gravar todos os dados em uma internal table
DO.
CLEAR: wa_dados.
EXEC SQL.
FETCH NEXT dbcur
INTO :wa_fat_status-setor_atividade,
:wa_fat_status-tp_nota,
:wa_fat_status-dt_faturamento,
:wa_fat_status-dt_boleto,
:wa_fat_status-status,
:wa_fat_status-dt_inclusao
ENDEXEC.
IF sy-subrc <> 0.
EXIT.
ELSE.
APPEND wa_fat_status TO it_fat_status.
ENDIF.
ENDDO.
" Encerra o cursor
EXEC SQL.
CLOSE dbcur
ENDEXEC.
CATCH cx_sy_native_sql_error INTO exc_ref.
error_text = exc_ref->get_text( ).
MESSAGE error_text TYPE 'S'.
PERFORM gravarErro USING error_text.
ENDTRY.
Exemplo de um update
TRY.
IF wa_dados-dt_processamento IS INITIAL.
EXEC SQL.
UPDATE ZSAP_FATURAMENTO
SET DT_PROCESSAMENTO = sysdate,
USR_PROCESSAMENTO = :sy-uname,
STATUS = 'P'
WHERE cd_zsap = :wa_dados-cd_zsap
ENDEXEC.
IF sy-subrc IS INITIAL.
EXEC SQL.
COMMIT
ENDEXEC.
ELSE.
MESSAGE 'Erro na atualização das datas' TYPE 'E'.
ENDIF.
ELSE.
EXEC SQL.
UPDATE ZSAP_FATURAMENTO
SET DT_REPROCESSO = sysdate,
USR_REPROCESSO = :sy-uname,
STATUS = 'P'
WHERE cd_zsap = :wa_dados-cd_zsap
ENDEXEC.
IF sy-subrc IS INITIAL.
EXEC SQL.
COMMIT
ENDEXEC.
ELSE.
MESSAGE 'Erro na atualização das datas' TYPE 'E'.
ENDIF.
ENDIF.
CATCH cx_sy_native_sql_error INTO exc_ref.
error_text = exc_ref->get_text( ).
MESSAGE error_text TYPE 'E'.
ENDTRY.
Nenhum comentário :
Postar um comentário