como declarar um array global. E como utiliza-lo dentro do forms.
Obrigado.
Array Global
- 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
É possível declarar variáveis dentro de um PACKAGE SPEC.
Daí essa variável pode ser visível durante toda a sessão. (não é bem "global", mas uma "global por sessão")
Talvez essa informação ajude.
Daí essa variável pode ser visível durante toda a sessão. (não é bem "global", mas uma "global por sessão")
Talvez essa informação ajude.
-
- Moderador
- Mensagens: 367
- Registrado em: Ter, 25 Mar 2008 3:41 pm
- Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
Ju, vou postar aqui um exemplo onde gosto de trabalhar com esse tipo de funcionalidade....
Criação do array global da sessão
Trabalhando com o Array no Forms
Lembre que sempre que tabalha com array de memoria, é necessário limpar a memoria ou, no decorrer do dia, a maquina terá sua memoria cada vez mais utilizada até travar geral...
Rotina para limpar o array (memoria)
Joga essa procedure de limpa array quando você ver que não vai mais utilizar os valores em memoria...
Espero ter ajudado...
Criação do array global da sessão
PACKAGE pkg_array IS
/* um Cursor é necessário para criar a "Table Of Cursor%ROWTYPE", mesmo que não seja usado, pois o tipo a ser criado deve se basear em uma tabela ou um cursor*/
CURSOR cArray IS
SELECT coluna
FROM owner.tabela;
-->> Tipo: Coleção de registros
TYPE tArray Is Table Of cArray%Rowtype index by binary_integer;
-->> Variável do tipo coleção
vArray tArray;
/*Variável para os valores do cursor (não se pode atribuir diretamente um registro do cursor à variável da coleção)*/
vRec cArray%rowtype;
-->> índice do array
i integer;
END;
/*Verificando os elementos armazenados se é maior que zero*/
IF nvl(pkg_array.vArray.count,0) > 0 THEN
/*Varre o array todo*/
FOR j IN 1..nvl(pkg_array.varray.last,0) LOOP
/*compara o valor do array de acordo com o indice e checa se é verdadeiro*/
IF pkg_Array.vArray(j).coluna = ValorTeste THEN
/*Se passou na condição, execute algo desejado*/
Rotina desejada;
END IF;
END LOOP;
END IF;
Rotina para limpar o array (memoria)
PROCEDURE Limpa_Pkg_Array IS
BEGIN
FOR j IN 1..nvl(PKG_ARRAY.vArray.last,0) LOOP
/*Compara o código do aviso de cirurgia com o aviso de cirurgia do cursor*/
pkg_array.vrray.delete(j);
END LOOP;
/*Fim do Loop para verificar os agendamentos localizados*/
END;
Espero ter ajudado...
-
- Rank: Programador Júnior
- Mensagens: 19
- Registrado em: Sex, 11 Jul 2008 11:14 am
- Localização: Campinas - SP
Marcos Pinheiro da Rocha
Desenvolvedor Java/Forms/PL-SQL
Desenvolvedor Java/Forms/PL-SQL
Só complementando ....
"Valores de um mesmo Array compartilhado por dois FORMS diferentes":
- você pode criar esta package com o array em uma PLL , depois você atacha essa PLL em dois forms, form1 e no form2 ...
- daí ao executar o FORM1, popule o array e chame o form2 com o comando CALL_FORM passando o parametro SHARE_LIBRARY_DATA.
- Após abrir o form2, ele vai visualizar todos os dados do array populados no form1 e ainda poderá inserir ou alterar nesse mesmo array, e quando fechar o form2 você vai ver que o form1 irá enchegar tambem todos os dados alterados no form2.
- com isso você deixa o array global a nivel de sistema sem precisar criar a package no banco.
- porém, se suas rotinas de banco precisarem ler esse array, então você tem que criar esse array em uma package no Banco, para que elas possam enchergar
espero ter sido claro para ajudar
"Valores de um mesmo Array compartilhado por dois FORMS diferentes":
- você pode criar esta package com o array em uma PLL , depois você atacha essa PLL em dois forms, form1 e no form2 ...
- daí ao executar o FORM1, popule o array e chame o form2 com o comando CALL_FORM passando o parametro SHARE_LIBRARY_DATA.
- Após abrir o form2, ele vai visualizar todos os dados do array populados no form1 e ainda poderá inserir ou alterar nesse mesmo array, e quando fechar o form2 você vai ver que o form1 irá enchegar tambem todos os dados alterados no form2.
- com isso você deixa o array global a nivel de sistema sem precisar criar a package no banco.
- porém, se suas rotinas de banco precisarem ler esse array, então você tem que criar esse array em uma package no Banco, para que elas possam enchergar
espero ter sido claro para ajudar
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes