Funções e parametros

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
luiszacheu
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 53
Registrado em: Seg, 31 Mai 2010 8:54 am
Localização: Londrina-Pr
Analista/Programador
Luís Gustavo Verri Zacheu

Olá caros amigos, gostaria de tirar a seguinte duvida com vocês, a posição de um parâmetro quando declarado tem que ser o mesmo de quando for passar o seu valor ao chamar a função, sendo assim gostaria de saber o porque quando eu não passo nenhum valor para um determinado parâmetro ele não pega o seu valor default. o que poderia ser quando acontece esse tipo de coisa.

obrigado...
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

vê se ajuda
luiszacheu
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 53
Registrado em: Seg, 31 Mai 2010 8:54 am
Localização: Londrina-Pr
Analista/Programador
Luís Gustavo Verri Zacheu

Victor, então o problema é o seguinte eu estou passando um valor default para um determinado paramentro, porem quando chamo a função e não passo esse valor a função não pegao o valor qu esta por default.

O problema que é dificil eu colar aqui o codigo.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

cola so a declaração da função e a sua chamada..

da pra ser?
luiszacheu
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 53
Registrado em: Seg, 31 Mai 2010 8:54 am
Localização: Londrina-Pr
Analista/Programador
Luís Gustavo Verri Zacheu

Olha está assim, então quando eu chamo a function eu não estou passando o 'p6' no paramentro então por default ele deveria pegar o valor 2 porem não está dando certo, dai quando eu passo o parametro explicitamente ele funciona.

Selecionar tudo

FUNCTION FUNC (
   p1          IN   DEFAULT 'AA',
   p2       IN   table.campo1%TYPE,
   p3       IN   table.campo2%TYPE,
   p4           IN   table.campo3%TYPE,
   p5       IN   table.campo4%TYPE DEFAULT 1,
   p6     IN   NUMBER DEFAULT 2,
   p7           IN   table.campo5%TYPE DEFAULT 0,
   p8          IN   CHAR DEFAULT '1',
   p9   IN   NUMBER DEFAULT 0,
   p10           IN   table.campo6%TYPE DEFAULT 0,
   p11       IN   VARCHAR DEFAULT '01',
   p12   IN   NUMBER DEFAULT 0
)
   RETURN NUMBER
IS
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

você não postou a chamada da function como eu te pedi..

pelo que estou entendendo.. acontece que quando você não menciona o seu p6 na chamada o seu p7 vira p6, logo quem vai receber o valor default eo seu p12 que na chamada ficou sem valor

leia...

Selecionar tudo

Parameters may also be assigned a default value. You can either use the assignment operator (:=) or 
use the DEFAULT keyword. When a parameter has a default value, you do not need to include that parameter 
in the call. You MUST always include IN OUT and OUT parameters.

Sample parameter declarations:

(
parameter_1 IN VARCHAR2 := 'ABC',
parameter_2 IN VARCHAR2 DEFAULT 'ABC',
parameter_3 IN OUT NUMBER,
parameters_can_be_named_anything OUT DATE
)

Parameter Reference

Calling programs may refer to parameters either positionally or by named notation. It is considered a best 
practice to refer to parameters via named notation. Almost no one does this consistently though (myself included).

Positional notation refers to listing the parameters by the position that they are declared. Using the example 
above, we could positionally refer to the parameters as:

('def', 'ghi', v_number_variable, v_date_variable)

For Named notation, you would use the actual name of the parameter. This is very handy for large parameter lists 
and for those parameter lists that have plenty of default values. When using named notation, the parameters do 
not have to be listed in the order of declaration.

(parameter_3 => v_number_variable, parameter_1 => 'def', v_date_variable => v_date_variable)
você tem que referenciar todos os seus parametros já que está pulando, uma parametro do meio..

ou então altere a declaração da sua function colocando o seu p6 em ultimo lugar..
luiszacheu
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 53
Registrado em: Seg, 31 Mai 2010 8:54 am
Localização: Londrina-Pr
Analista/Programador
Luís Gustavo Verri Zacheu

Sim, isso mesmo deu certo aqui, era o posicionamento dos parametros mesmo...

Obrigado, pela atenção.
Responder
  • Informação
  • Quem está online

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