Criando uma Function

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Avatar do usuário
lincolnrn
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Ter, 05 Jan 2010 9:41 am
Localização: Contagem-MG
Contato:
Lincoln Rocha Nogueira
www.tecconect.com

Galera to com uma duvida para criação de uma function..


Olha so tenho um select que preciso de chamar ele umas vezes em algumas consultas pensei em criar uma function mas por onde começar para criar a tal function...

O select é este:

Selecionar tudo

SELECT 
        DECODE(f.ie_funcao,         '2', 'Cirurgião Principal:', 
                                    '3', 'Primeiro Auxiliar:', 
                                    '5', 'Anestesista:')  || ' ' || 
    c.NM_PESSOA_FISICA as linha5
    from PESSOA_FISICA c, CIRURGIA e,    CIRURGIA_PARTICIPANTE f    
where E.NR_ATENDIMENTO = :NR_ATENDIMENTO
AND E.NR_CIRURGIA = F.NR_CIRURGIA
and f.CD_PESSOA_FISICA = c.CD_PESSOA_FISICA  
and f.ie_funcao = :ie_funcao
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Dá uma olhada na sintaxe e exemplos em:
http://www.techonthenet.com/oracle/functions.php
http://psoug.org/reference/functions.html

Se persistir duvidas é só dizer.
Avatar do usuário
lincolnrn
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Ter, 05 Jan 2010 9:41 am
Localização: Contagem-MG
Contato:
Lincoln Rocha Nogueira
www.tecconect.com

Ficaria assim?

Selecionar tudo

CREATE OR REPLACE function TASY.obter_participante_cirurgia (nr_cirurgia	number,
				    ie_opcao_p		varchar2)
 		    	return varchar2 is
begin

SELECT 
        DECODE(f.ie_funcao,         '2', 'Cirurgião Principal:', 
                                    '3', 'Primeiro Auxiliar:', 
                                    '5', 'Anestesista:')  || ' ' || 
    c.NM_PESSOA_FISICA as linha5
    from PESSOA_FISICA c, CIRURGIA e,    CIRURGIA_PARTICIPANTE f    
where E.NR_ATENDIMENTO = :NR_ATENDIMENTO
AND E.NR_CIRURGIA = F.NR_CIRURGIA
and f.CD_PESSOA_FISICA = c.CD_PESSOA_FISICA  
and f.ie_funcao = :ie_funcao

end obter_participante_cirurgia;
/
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

"Quase".

-Precisa criar uma variável de retorno antes do BEGIN.
-O resultado do select atribuir a essa variável:
"Select x INTO my_var from ...."
-Depois retornar essa variável no fim.
-Teoricamente seus parâmetros deveriam fazer parte do filtro do select e tem o ":ie_funcao" que vem de lugar nenhum.

Olha bem os exemplos dos links que postei.
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Uma função ela tem que necessariamente retornar um valor, esse é a principal diferença de uma procedure. A dificuldade inicial de transformar uma rotina de consulta em uma function esta na abstração de conseguir enxergar e entender como funciona este recurso.

Como já dito anteriormente, os campos do seu filtro serão os parâmetros de entrada para a execução da sua function, cabe a você determinar se a consulta será "casesensitive" ou não.

Quanto ao retorno, para exibir o resultado, depende muito do contexto a que se aplica, você está fazendo isso através de uma aplicação, vai executar via linha de comando, bloco anônimo? Segue abaixo a sintaxe basica:

Selecionar tudo


CREATE [OR REPLACE] FUNCTION nome_da_função
[( parameter1 [ mode1] datatype1,
parameter2 [ mode2] datatype2,
. . .)]
RETURN tipo_de_dado
IS|AS
Bloco PL/SQL;


Att.,
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Não seria o caso de criar uma View com esse SQL, em vez de colocá-lo numa function?
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes