terça-feira, 19 de maio de 2009

Comandos básicos de banco e EBS

Uma dica rápida hoje... vou passar alguns comandos básicos de banco e EBS...

-> FND_PROFILE.VALUE('USER_ID')
-- Recupera o ID do usuário logado no EBS (USER_ID da FND_USER)

-> FND_PROFILE.VALUE('USERNAME')
-- Recupera o nome do usuário logado no EBS (USER_NAME da FND_USER)

-> FND_GLOBAL.CONC_REQUEST_ID ou FND_PROFILE.VALUE('REQUEST_ID')
-- Recupera o ID do concurrent em execução (REQUEST_ID da FND_CONCURRENT_REQUESTS)

-> FND_GLOBAL.CONC_PROGRAM_ID
-- Recupera o ID do programa em execução (CONCURRENT_PROGRAM_ID da FND_CONCURRENT_PROGRAMS)

-> FND_GLOBAL.PROG_APPL_ID
-- Recupera o ID da aplicação do concurrent em execução (APPLICATION_ID da FND_CONCURRENT_PROGRAMS)

-> FND_PROFILE.VALUE('ORG_ID')
-- Recupera o ID da Organização setada da responsabilidade corrente

-> FND_GLOBAL.RESP_NAME;
-- Recupera o nome da responsabilidade corrente

-> FND_CLIENT_INFO.SET_ORG_CONTEXT('1')
-- Seta organização no banco (por sessão)

-> DBMS_SESSION.SET_NLS('NLS_LANGUAGE', '"BRAZILIAN PORTUGUESE"') ou DBMS_SESSION.SET_NLS('NLS_LANGUAGE', 'AMERICAN')
-- Seta o idioma no banco (por sessão)

-> DBMS_SESSION.SET_NLS('NLS_TERRITORY', 'BRAZIL') ou DBMS_SESSION.SET_NLS('NLS_TERRITORY', 'AMERICA')
-- Seta o território no banco (por sessão)

-> FND_PROFILE.PUT('GL_SET_OF_BKS_ID', 1111);
-- Seta valores numa profile (GL_SET_OF_BKS_ID é profile e o 1111 é o valor que esta sendo setado)

-> DBMS_UTILITY.COMPILE_SCHEMA('<>');
-- Compila um schema inteiro

-> SELECT * FROM V$INSTANCE
-- Para pegar informações sobre o banco que esta conectado

-> ALTER USER <> IDENTIFIED BY <>
-- Para alterar a senha de um usuário de banco:

-> ALTER TABLE <> DROP COLUMN <>;
-- Deletar coluna da tabela


São comandos básicos, mas podem ser bastante útil de acordo com necessidade de cada um...


Abrsss...

quarta-feira, 13 de maio de 2009

Submeter um concurrent no Oracle EBS de dentro de um código PL/SQL com data de execução dinâmica (FND_REQUEST.SUBMIT_REQUEST)

E ai pessoal!!!! Blz???

Hoje vou mostrar uma solução simples para um problema que tive, talvez alguém não conheça essa função e suas opções...

A situação é seguinte, precisamos executar um concurrent todo último dia do mês e não pode ser sábado ou domingo.

Na minha primeira visão da solução, imaginei o próprio schedule do concurrent, colocando na opção "Em dias específicos", porém, lá só tem a opção de ultimo dia, ele não vai se importar se o dia é sábado ou domingo...

Minha idéia é submeter o concurrent de dentro do meu PL/SQL, pega o último dia do mês seria simples, verificar se é sábado ou domingo também é simples, só não sabia se conseguiria colocar uma data para iniciar a execução do concurrent usando o FND_REQUEST.SUBMIT_REQUEST.

Pra quem não conhece o FND_REQUEST.SUBMIT_REQUEST, ela é um API da Oracle que irá submeter o concurrent do seu PL/SQL... guarda esse nome, que com certeza irá usar algum dia.

Depois de uma pesquisada... descobri um parâmetro do FND_REQUEST.SUBMIT_REQUEST que se coloca a data de execução, é somente preencher o parâmetro START_TIME.

Sempre que utilizava o FND_REQUEST.SUBMIT_REQUEST colocava somente os parâmetros obrigatórios e argumentos, não conhecia o START_TIME.

Assim, a solução ficou simples, montei o meu código da seguinte maneira, peguei o ultimo dia do mês com a query abaixo e verifiquei se é sábado ou domingo:

SELECT DECODE( TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,1)),'D')
, '1', TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,1))-2,'DD-MON-RRRR ')
, '7', TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,1))-1,'DD-MON-RRRR ')
, TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,1)),'DD-MON-RRRR ')
) '14:00:00'
INTO v_date_submit
FROM dual;

Com o resultado executei a FND_REQUEST.SUBMIT_REQUEST passando a data que select acima retornou no parâmetro START_TIME.

v_request_id := fnd_request.submit_request( application => 'XXFND' -- Aplicação do concurrent
, program => 'XXCONCURRENT' -- Nome do concurrent
, description => 'Meu Concurrent' -- Descrição do concurrent
, start_time => v_date_submit -- Data de Execução do concurrent
, argument1 => 'S' -- Parâmetro do concurrent
, argument2 => '1060' -- Parâmetro do concurrent
);

Ai é só sair para o abraço!!!!!!

Um exemplo de como o programa ira funcionar: Hoje é dia 30/04/2009, o usuário submete o concurrent. O programa vai fazer todo o processo, buscar o ultima dia do mês seguinte 29/05/2009 e submeter o concurrent para rodar nesta data. Quando chegar no dia 29/05/2009 ele vai fazer processo, buscar o ultima dia do mês seguinte 30/06/2009 e submter o concurrent para rodar nesta data... e assim vai longe... até alguém cancelar o concurrent schedulado.

Espero que a dica acima ajude algum profissional necessitado... heheheheeeeeeeeee



Absss

terça-feira, 5 de maio de 2009

Status de um Concurrent no EBS

Olá pessoal!!! Beleza???

Hoje vou passar uma dica sobre os possíveis status de um concurrent no EBS.

Para saber o status do concurrent você tem que olhar dois campos, o PHASE_CODE e o STATUS_CODE da FND_CONCURRENT_REQUESTS (tabela de execução de concurrent). Olhando os dois campos saberemos qual o status do concurrent.

Esses campos armazenam apenas letras, então, na tabelas abaixo tem o significado de cada letra:

-> PHASE_CODE:


-> STATUS_CODE:


Exemplo: Tenho um concurrent com o ID (REQUEST_ID) número 2612437 e quero saber qual o seu status. Dando um select na tabela de execução de concurrent vai mostrar os nossos dois campos (PHASE_CODE e STATUS_CODE), conforme abaixo


Neste caso, o concurrent foi completado (terminou) com erro.

Abs,