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 <t...@sss.pgh.pa.us> wrote:

> Andre Lopes <lopes80an...@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
>

Reply via email to