Pessoal, boa tarde. Como faço para popular uma lov com o retorno de uma procedure, vi varios exemplos no site mas a partir de uma query, no meu caso para não ficar reescrevento a query da procedure...isto é possivel.
obrigado.
Como popular uma lov com o retorno de uma procedure
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Eu acho que você vai ter que colocar os dados que vem da procedure numa tabela antes :-/
-
- Rank: Programador Sênior
- Mensagens: 52
- Registrado em: Sáb, 29 Set 2007 12:59 am
- Localização: Araraquara-SP
- Contato:
Ricardo Neves
Analista e Instrutor Oracle Developer
Java Developer (JPA/JSF/Hibernate/WebServices/EJB)
Analista e Instrutor Oracle Developer
Java Developer (JPA/JSF/Hibernate/WebServices/EJB)
A solução para LOV baseada em procedure é a seguinte:
1. Parar criar uma LOV baseada em Procedure é necessário construir umaa rotina que irá retornar os registros (Type) com as informações da LOV.
Segue em anexo a rotina exemplo que deve ser criada:
2. Criar um RECORD_GROUP no forms
3. Adicione as colunas no Record Group EMPNO E ENAME
4. Modificar a propriedade “TIPO DE GRUPO DE REGISTRO” de “Estático” para “Consulta” do Record Group
5. Criar a LOV utilizando o WIZARD, selecionando o Record Group criado.
6. Criar a “TRIGGER” KEY-LISTVAL no campo onde é chamada a LOV.
7. Na trigger adicionar o seguinte código:
Sua LOV baseada em procedure está pronta.
1. Parar criar uma LOV baseada em Procedure é necessário construir umaa rotina que irá retornar os registros (Type) com as informações da LOV.
Segue em anexo a rotina exemplo que deve ser criada:
create or replace package pkg_treinamento is
-- Registro de empregados
type v_rec_empregados is record (
empno number(4),
ename varchar2(10)
);
type v_tab_empregos is table of v_rec_empregados index by binary_integer;
-- Procedure responsavel por retorna os empregados em um registro
procedure prc_lov_empregados (
p_tab_empregados in out v_tab_empregos,
p_mens in out varchar2
);
end pkg_treinamento;
/
create or replace package body pkg_treinamento is
-- Procedure responsavel por retorna os empregados em um registro
procedure prc_lov_empregados (
p_tab_empregados in out v_tab_empregos,
p_mens in out varchar2
) is
cursor c1 is
select empno,
ename
from emp;
v_ind number := 0;
begin
-- Carrega o registro de empregados
for r1 in c1 loop
v_ind := v_ind + 1;
p_tab_empregados(v_ind).empno := r1.empno;
p_tab_empregados(v_ind).ename := r1.ename;
end loop;
exception
when others then
p_mens := 'PKG_TREINAMENTO.PRC_LOV_EMPREGADOS - Problemas ao executar a rotina. Erro: ' || sqlerrm;
end;
end pkg_treinamento;
/
3. Adicione as colunas no Record Group EMPNO E ENAME
4. Modificar a propriedade “TIPO DE GRUPO DE REGISTRO” de “Estático” para “Consulta” do Record Group
5. Criar a LOV utilizando o WIZARD, selecionando o Record Group criado.
6. Criar a “TRIGGER” KEY-LISTVAL no campo onde é chamada a LOV.
7. Na trigger adicionar o seguinte código:
declare
v_tab_empregados pkg_treinamento.v_tab_empregados;
v_mens varchar2(255);
rg_name varchar2(14) := 'RG_EMPREGADOS';
rg_empno varchar2(50) := rg_name || '.EMPNO';
rg_ename varchar2(50) := rg_name || '.ENAME';
rg_id recordgroup;
gc_id groupcolumn;
begin
-- Executa a rotina para carregar os empregados no registro(Type)
begin
pkg_treinamento.prc_lov_empregados (
v_tab_empregados,
v_mens
);
exception
when others then
message('PKG_TREINAMENTO.PRC_LOV_EMPREGADOS - Problemas ao executar a rotina. Erro: ' || sqlerrm);
message('PKG_TREINAMENTO.PRC_LOV_EMPREGADOS - Problemas ao executar a rotina. Erro: ' || sqlerrm);
raise form_trigger_failure;
end;
--
if v_mens is not null then
message(v_mens);
message(v_mens);
raise form_trigger_failure;
end if;
-- Procura o Record Group
rg_id := find_group(rg_name);
-- Se encontrou o Record Group limpa todas as linhas do Record Group
if not id_null(rg_id) then
delete_group_row(rg_id,ALL_ROWS);
-- Le o registro carregados com os empregados e popula o Record Group
for v_ind in nvl(v_tab_empregados.first,1)..nvl(v_tab_empregados.last,0) loop
-- Adiciona uma linha no fim do Record Group
add_group_row(rg_id, end_of_group);
-- Seta os valores nas colunas do Record Group
set_group_char_cell(rg_ename,v_ind,v_tab_empregados(v_ind).ename);
set_group_number_cell(rg_empno,v_ind,v_tab_empregados(v_ind).empno);
end loop;
end if;
-- Exibe a lista de valores com os empregados
list_values;
--
exception
when form_trigger_failure then
raise;
when others then
message('KEY-LISTVAL - Problemas ao executar a rotina. Erro: ' || sqlerrm);
message('KEY-LISTVAL - Problemas ao executar a rotina. Erro: ' || sqlerrm);
end;
Sua LOV baseada em procedure está pronta.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes