Boa tarde!
Por favor, como eu faço para chamar uma função (do banco) no Forms?
Function no Forms
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Thati,
Num botão teu, ou numa procedure:
-- Onde no exemplo anterior você joga o Nome da pessoa, passando o código.
OU
Um outro exemplo:
Num CURSOR DO Forms:
qualquer coisa, manda ai.
Num botão teu, ou numa procedure:
DECLARE
V_RETORNA_NOME VARCHAR2(200);
BEGIN
V_RETORNA_NOME := PCK_BANCO.FUN_RETORNA_NOME(1);
END;
-- Onde no exemplo anterior você joga o Nome da pessoa, passando o código.
OU
Um outro exemplo:
Num CURSOR DO Forms:
CURSOR CUR_DADOS
IS
SELECT ENDERECO,
PCK_BANCO.FUN_BUSCA_NOME(ID) Nome
FROM T_ENDERECO;
-
- Rank: Programador Júnior
- Mensagens: 15
- Registrado em: Qui, 03 Mai 2007 5:35 pm
- Localização: São Paulo - SP
Trevisolli,
Primeiro, obrigada pela resposta!!
Mas não está dando certo...
Olha só:
Problema original: No forms, eu preciso fazer um where dinâmico. Tentei fazer como faço no Reports, carregando um parameter e chamando ele na query, mas não deu certo porque vezes eu preciso fazer
'And campox = variável"
e outras vezes
Então, não consegui tratar o "=" e o "In". Foi aí que tive a idéia de fazer uma função de banco, que retorna um cursor... Dentro dessa function, eu trato as duas situações, e ele retorna o cursor certo.
Agora, eu preciso dar um jeito de receber o retorno da função no forms, abrir o cursor e carregar meus campos...
Quando tento fazer da primeira forma que você postou, ao compilar o trigger do botão, recebo a seguinte msg:
Sabe o que é isso??
Primeiro, obrigada pela resposta!!
Mas não está dando certo...
Olha só:
Problema original: No forms, eu preciso fazer um where dinâmico. Tentei fazer como faço no Reports, carregando um parameter e chamando ele na query, mas não deu certo porque vezes eu preciso fazer
'And campox = variável"
e outras vezes
And campox In (1, 2, 3)
Agora, eu preciso dar um jeito de receber o retorno da função no forms, abrir o cursor e carregar meus campos...
Quando tento fazer da primeira forma que você postou, ao compilar o trigger do botão, recebo a seguinte msg:
PDE-PSD001 Could not resolve reference to <Unknown Program Unit> while loading Block PI5_25_OCT_200713_12_37.
-
- Rank: Programador Júnior
- Mensagens: 15
- Registrado em: Qui, 03 Mai 2007 5:35 pm
- Localização: São Paulo - SP
Só um complemento:
A variação na clausula where deve-se porque o usuário pode:
* não informar o parametro (null);
* Selecionar um item.
* Ou selecionar 'n' itens.
Então seria:
ou
A variação na clausula where deve-se porque o usuário pode:
* não informar o parametro (null);
* Selecionar um item.
* Ou selecionar 'n' itens.
Então seria:
And campox = Nvl(parametro, campox)
And campox In (parametro1, parametro2, parametro3, ...)
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Estou montando um exemplo de Pre_query e já posto aqui.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Thati,
Crie uma tabela com 3 campos (chamada teste):
E faça um teste com este exemplo aqui e, qualquer coisa, dá um alô.
Nota importante: A trigger PRE-QUERY do bloco Teste, é onde você irá realizar o teu "Where dinâmico" ok?
Crie uma tabela com 3 campos (chamada teste):
ID
NOME
CHEFE
Nota importante: A trigger PRE-QUERY do bloco Teste, é onde você irá realizar o teu "Where dinâmico" ok?
-
- Rank: Programador Júnior
- Mensagens: 15
- Registrado em: Qui, 03 Mai 2007 5:35 pm
- Localização: São Paulo - SP
Trevisolli,
Dei uma olhada no forms exemplo... Mas vi que você setou o where do block. O que acontece é: O bloco que preciso carregar não é base table, então, não dá para eu fazer isso... foi por isso que comecei essa história de fazer a function... A primeira coisa que fiz antes disso foi salvar a clausula (string) num campo para usar ele no cursor, passando ele como parametro do cursor... Mas fazendo dessa forma, eu tenho que montar a clausula no where do cursor e fazer a comparação com o parametro que recebo... E aí que dá pau: Não consegui tratar para usar "In" ou "="....
Dei uma olhada no forms exemplo... Mas vi que você setou o where do block. O que acontece é: O bloco que preciso carregar não é base table, então, não dá para eu fazer isso... foi por isso que comecei essa história de fazer a function... A primeira coisa que fiz antes disso foi salvar a clausula (string) num campo para usar ele no cursor, passando ele como parametro do cursor... Mas fazendo dessa forma, eu tenho que montar a clausula no where do cursor e fazer a comparação com o parametro que recebo... E aí que dá pau: Não consegui tratar para usar "In" ou "="....
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Então, essa tratativa de se ter o "in" ou o "=", pode ser feita com sql dinâmico.
Aqui no fórum tem vários exemplos.
Dá uma procurada por DINÂMICO que vai achar vários exemplos, como esta DICA do Dr_Gori:
http://www.glufke.net/oracle/viewtopic. ... din%E2mico
qualquer coisa, manda ai.
Aqui no fórum tem vários exemplos.
Dá uma procurada por DINÂMICO que vai achar vários exemplos, como esta DICA do Dr_Gori:
http://www.glufke.net/oracle/viewtopic. ... din%E2mico
qualquer coisa, manda ai.
-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
boa tarde thatifc
você precisa criar um bloco, um cursor ou uma consulta com esse where dinamico?
se for um bloco a melhor forma de fazer é criar um bloco baseando em clausula from ou setar o default_where do bloco
abrçs
você precisa criar um bloco, um cursor ou uma consulta com esse where dinamico?
se for um bloco a melhor forma de fazer é criar um bloco baseando em clausula from ou setar o default_where do bloco
abrçs
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Thati,
Em último caso, pode basear este teu bloco numa Procedure ou numa View, se assim achar mais fácil.
Em último caso, pode basear este teu bloco numa Procedure ou numa View, se assim achar mais fácil.
-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
ok... se você tem o bloco fica mais facil...
não sei se tem algum exemplo aqui no forum... mais cria um bloco data_base baseado em clausula from
1º - na trigger pre-query do mesmo você tem uma variavel que vai armazenar a string do seu sql que você pode criar normalmente
2º - setar o bloco a propriedade do bloc com tua strig
obs: seus itens que você retorna no sql no bloco devemt er o mesmo nome, o mesmo tamanho, serem do mesmo tipo de dados, e serem data_base
ex:
espero q sirva...
abrçs
não sei se tem algum exemplo aqui no forum... mais cria um bloco data_base baseado em clausula from
1º - na trigger pre-query do mesmo você tem uma variavel que vai armazenar a string do seu sql que você pode criar normalmente
2º - setar o bloco a propriedade do bloc com tua strig
obs: seus itens que você retorna no sql no bloco devemt er o mesmo nome, o mesmo tamanho, serem do mesmo tipo de dados, e serem data_base
ex:
declare
v_sql varchar2(32767);
begin
v_sql := '(select cd_pessoa,nm_pessoa from pessoa';
--
if :filtro.ativos = 'S' then
v_sql := v_sql || ' where st_ativo in(''N'',''C''))';
elsif
v_sql := v_sql || ' where st_ativo in(''A''))';
end if;
--
set_block_propert(:system.cursor_block,query_data_source_name,v_sql);
end;
espero q sirva...
abrçs
-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
ops vou mehlorar..
declare
v_sql varchar2(32767);
begin
v_sql := '(select cd_pessoa,nm_pessoa from pessoa';
--st_ativo A-ativos N-desativados C-Cancelados
if :filtro.ativos = 'T' then --todos não cancelados
v_sql := v_sql || ' where st_ativo in(''S'',''N''))';
elsif :filtro.ativos = 'A' then --ativos
v_sql := v_sql || ' where st_ativo in(''A''))';
elsif :filtro.ativos = 'C' then --cancelados
v_sql := v_sql || ' where st_ativo in(''C''))';
elsif :filtro.ativos = 'N' then --desativados
v_sql := v_sql || ' where st_ativo in(''C''))';
else
v_sql := v_sql || ')';
end if;
--
set_block_propert(:system.cursor_block,query_data_source_name,v_sql);
end;
- Porva
- Rank: DBA Sênior
- Mensagens: 342
- Registrado em: Seg, 29 Jan 2007 7:36 am
- Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP
São Paulo/SP
Pessoal, aproveitando a polêmica do tópico, realmente não é possível fazer um Where dinâmico num cursor 'estático' na situação de se ter 'IN', '=' ou nada??? 
desculpem a ignorância, já se falou um monte aqui, mas é que não ficou muito claro mesmo, já que seria uma mão na roda ter essa possibilidade!

desculpem a ignorância, já se falou um monte aqui, mas é que não ficou muito claro mesmo, já que seria uma mão na roda ter essa possibilidade!
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Não entendi o que quis dizer com 'cursor estático' mas, where dinâmico no forms, sem problemas, dá pra se fazer sim.
Não entendi o que quis dizer com 'cursor estático' mas, where dinâmico no forms, sem problemas, dá pra se fazer sim.
- Porva
- Rank: DBA Sênior
- Mensagens: 342
- Registrado em: Seg, 29 Jan 2007 7:36 am
- Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP
São Paulo/SP
o Cursor convencional, Paulão..
o dinâmico é aquele que a gente tem que definir as colunas, e que utilizamos o comando Parse pra executar o SQL etc, o que eu quis dizer com 'estático' é o outro:
o dinâmico é aquele que a gente tem que definir as colunas, e que utilizamos o comando Parse pra executar o SQL etc, o que eu quis dizer com 'estático' é o outro:
CURSOR nome_do_cursor IS
SELECT * FROM...
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Cara, no caso do cursor, o correto seria se montar um pl/sql dinâmico, por exemplo, utilizando a DBMS_SQL que você citou brother.
Daí você faz o loop e trabalha normalmente.
Existem vários exemplos aqui no fórum sobre sql dinâmico.
qualquer coisa, manda ai brother.
Daí você faz o loop e trabalha normalmente.
Existem vários exemplos aqui no fórum sobre sql dinâmico.
qualquer coisa, manda ai brother.
- Porva
- Rank: DBA Sênior
- Mensagens: 342
- Registrado em: Seg, 29 Jan 2007 7:36 am
- Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP
São Paulo/SP
beleza Paulão, eu saquei
só comentei mesmo que seria bem melhor se não precisasse utilizar o DBMS., o código ficaria muito mais enxuto
mas paciência, vâmos fazendo da maneira que é possível
só comentei mesmo que seria bem melhor se não precisasse utilizar o DBMS., o código ficaria muito mais enxuto
mas paciência, vâmos fazendo da maneira que é possível
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Então brother,
Dependendo da situação, um Execute Immediate também serve.
Veja este exemplo que o Tineks (Cristiano) colocou no fórum:
http://glufke.net/oracle/viewtopic.php? ... ht=execute
qualquer coisa, manda ai.
Dependendo da situação, um Execute Immediate também serve.
Veja este exemplo que o Tineks (Cristiano) colocou no fórum:
http://glufke.net/oracle/viewtopic.php? ... ht=execute
qualquer coisa, manda ai.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes