FAQ
Hi,

I have a function, that I'm debugging...

If I use NULL in any parameter the function does not RAISE any NOTICE. I
can't pass NULL values in parameters?

[code]
select apr_ins_gder_2_1
('table_fgh' /* Varchar */,
'id_fgh' /* Varchar */,
'5' /* Varchar */,
NULL /* Date */,
'2001-01-05' /* Date */,
'coment...' /* Varchar */)
[/code]

Solutions for pass NULL values in the parameters and receive RAISE NOTICE's?

Sorry for my english.


Best Regards,

Search Discussions

  • Tom Lane at May 4, 2010 at 10:23 pm

    Andre Lopes writes:
    If I use NULL in any parameter the function does not RAISE any NOTICE. I
    can't pass NULL values in parameters?
    Sure you can. Maybe you declared the function STRICT? That means to
    not call it for a NULL.

    regards, tom lane
  • Andre Lopes at May 5, 2010 at 12:12 am
    Hi,

    Thanks for the reply. I have not call it STRICT...

    The function is:

    [code]
    CREATE OR REPLACE FUNCTION "apr_insert_hist_2_1" (IN pNOME_VIEW varchar, IN
    pCHAVE_1 varchar, IN pVAL_CHAVE_1 varchar, IN pVAL_CHAVE_2 date, IN
    pVAL_CAMPO1 date, IN pVAL_COMENT varchar)
    RETURNS void AS
    $BODY$

    DECLARE
    pNOME_VIEW alias for $1;
    pCHAVE_1 alias for $2;
    pVAL_CHAVE_1 alias for $3;
    pVAL_CHAVE_2 alias for $4;
    pVAL_CAMPO_1 alias for $5;
    pVAL_COMENT alias for $6;
    vQUERY_COUNT varchar;
    vCONTA int4;
    vDAT_INICIO_0 date;
    vDAT_FIM_0 date;
    vMAX_DAT_INICIO_MAI_0 date;
    -- vEMAIL_KEY varchar;
    vDEBUG varchar;
    vDEBUG_2 varchar;

    BEGIN
    -- Condições para se abortar a função
    -- Verificar que a dat_inicio está preenchida, não pode estar a nulo.
    IF pVAL_CHAVE_2 ISNULL THEN
    RAISE NOTICE 'O campo data inicio não pode ser nulo.';
    RETURN; /* Sai da função */
    END IF;
    -- Verificar que a dat_fim é maior que a dat_inicio.
    IF pVAL_CHAVE_2 > pVAL_CAMPO1 THEN
    RAISE NOTICE 'O campo data fim tem de ser maior que o campo data
    inicio.';
    RETURN; /* Sai da função */
    END IF;


    -- Vou verificar se já existe algum registo para o ID_ANUNCIO_EXTERNO
    EXECUTE 'SELECT COUNT(*) as conta FROM '
    quote_ident(pNOME_VIEW)
    ' WHERE '
    quote_ident(pCHAVE_1)
    ' = '
    quote_literal(pVAL_CHAVE_1)
    INTO STRICT vCONTA;

    -- Para DEBUG
    -- RAISE NOTICE 'Contagem: %', vCONTA;

    -- Verificar se existem registos na tabela
    -- Se não existirem registos, entra aqui.
    IF vCONTA = 0 THEN
    RAISE NOTICE 'entrou aqui 0';
    -- Fazer o INSERT dinamico como primeiro registo do ID_QQ_COISA
    EXECUTE 'INSERT INTO '
    quote_ident(pNOME_VIEW)
    ' ('
    quote_ident(pCHAVE_1)
    ', DAT_INICIO, DAT_FIM, COMENT) values ('
    quote_literal(pVAL_CHAVE_1)
    ', '
    quote_literal(pVAL_CHAVE_2)
    ', '
    quote_literal(pVAL_CAMPO1)
    ', '
    quote_literal(pVAL_COMENT)
    ')';
    RAISE NOTICE 'dat_inicio: %', vDAT_INICIO_0;
    RAISE NOTICE 'dat_fim: %', vDAT_FIM_0;
    -- RAISE NOTICE 'select: %', vDEBUG;

    -- Se já existirem registo, entra aqui
    ELSEIF vCONTA > 0 THEN
    RAISE NOTICE 'entrou aqui > 0';
    -- Vou verificar que a dat_inicio agora inserida não é maior que a
    -- última dat_inicio para o ID_QQ_COISA.
    -- Vou ver qual a dat_inicio máxima para o ID_QQ_COISA
    EXECUTE 'SELECT MAX(dat_inicio) AS max_dat_inicio FROM '
    quote_ident(pNOME_VIEW)
    ' WHERE '
    quote_ident(pCHAVE_1)
    ' = '
    quote_literal(pVAL_CHAVE_1)
    INTO STRICT vMAX_DAT_INICIO_MAI_0;

    -- Vou verificar que a nova data inserida agora não é inferior à
    data máxima.
    IF pVAL_CHAVE_2 < vMAX_DAT_INICIO_MAI_0 THEN
    RAISE NOTICE 'A data inicio tem de ser maior que o campo data
    inicio anterior.';
    RETURN; /* Sai da função */
    END IF;

    -- Vou inserir uma nova linha


    -- SELECT dat_inicio FROM aae_hist_anuncios WHERE id_anuncio_externo
    = '5';
    -- select max(dat_inicio) as max_dat_inicio from atae_hist_anuncios



    END IF;



    END;
    $BODY$
    LANGUAGE PLpgSQL
    RETURNS NULL ON NULL INPUT
    VOLATILE
    EXTERNAL SECURITY INVOKER;
    [/code]

    I'm doing something wrong?


    Best Regards,


    On Tue, May 4, 2010 at 11:23 PM, Tom Lane wrote:

    Andre Lopes <lopes80andre@gmail.com> writes:
    If I use NULL in any parameter the function does not RAISE any NOTICE. I
    can't pass NULL values in parameters?
    Sure you can. Maybe you declared the function STRICT? That means to
    not call it for a NULL.

    regards, tom lane
  • Tom Lane at May 5, 2010 at 12:26 am

    Andre Lopes writes:
    Thanks for the reply. I have not call it STRICT...
    Yes you are:
    RETURNS NULL ON NULL INPUT
    regards, tom lane
  • Andre Lopes at May 5, 2010 at 8:09 am
    Oh... Thanks. What a lame I'm.

    Best Regards,
    On Wed, May 5, 2010 at 1:25 AM, Tom Lane wrote:

    Andre Lopes <lopes80andre@gmail.com> writes:
    Thanks for the reply. I have not call it STRICT...
    Yes you are:
    RETURNS NULL ON NULL INPUT
    regards, tom lane

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-general @
categoriespostgresql
postedMay 4, '10 at 10:10p
activeMay 5, '10 at 8:09a
posts5
users2
websitepostgresql.org
irc#postgresql

2 users in discussion

Andre Lopes: 3 posts Tom Lane: 2 posts

People

Translate

site design / logo © 2021 Grokbase