Re: [pgbr-geral] pl/pgsql function - Postgres 9.2

2016-06-02 Por tôpico Patrick Baker
Olá pessoal.. a function já está funcionando... tudo certo.

obrigado
Patrick
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] pl/pgsql function - Postgres 9.2

2016-06-02 Por tôpico Patrick Baker
Olá pessoal,

Segue a função:

CREATE or REPLACE FUNCTION function_data_1()

RETURNS INTEGER AS $$


declare

row record;


BEGIN


-- copying the data to the backup table (not the blobs)

FOR row IN EXECUTE '

SELECT

t1.file_id

FROM

table1_n_b t1

JOIN

table3_n_b t3 ON t3.file_id = t1.file_id ORDER BY 1
LIMIT 3' LOOP


-- Creating the backup table with the essential data

EXECUTE '

INSERT INTO table2_y_b (note_id, size, file_id, full_path)

(

SELECT

t1.note_id,

t1.size,

t1.file_id,

t1.full_path

FROM

table1_n_b t1

JOIN

table3_n_b t3 ON t3.file_id = t1.file_id

) ';


-- copying the blobs to the table above

EXECUTE '

UPDATE table2_y_b t2 SET data =

(

SELECT

o1.data

FROM

original_table1_b o1

JOIN

table3_n_b t3 ON t3.file_id = o1.file_id

WHERE

t3.migrated = 0

AND

t2.file_id = o1.file_id

)

WHERE t2.file_id = row.file_id ';



-- updating the migrated column from 0 to 1

EXECUTE '

UPDATE

table2_y_b t2

SET

migrated = 1

WHERE

t2.file_id = row.file_id

AND

migrated = 0 ';



-- setting the blob as null

EXECUTE '

UPDATE

original_table1_b o1

SET

data = NULL

WHERE

o1.file_id = row.file_id ';

END LOOP;


return row.file_id;


END


$$ language 'plpgsql';


No entando, quando executada, ela apresenta o seguinte erro:

ERROR:  missing FROM-clause entry for table "row"
> LINE 15: WHERE t2.file_id = row.file_id


Por que isto acontece? Como resolver?

Obrigado.
Patrick
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] pl/pgsql function - Postgres 9.2

2016-06-02 Por tôpico Patrick Baker
>
>
>>
> Bom dia
> não seria fácil você colocar um limit no select que gera os inserts,
> utilizando o parâmetro que chama a funcion?
>
> algo assim:
>
>   SELECT
> o1.data
> FROM
> original_table1_b o1
> JOIN
> table3_n_b t3 ON t3.file_id = o1.file_id
> WHERE
> t2.migrated = 0
> AND
> t2.file_id = o1.file_id
> limit *rows *
> --
>
>
Fala Douglas

Poderia até ser.. mas eu quero chamar a função ( select
function_data_1(5000) ) e poder escolher o número de rows
Ou seja, o limite nem sempre será o mesmo ( São 3 milhões de rows para
alterar )

Então limitar em um número específico não me ajuda muito...
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] pl/pgsql function - Postgres 9.2

2016-06-02 Por tôpico Douglas Fabiano Specht
Em 2 de junho de 2016 01:10, Patrick Baker 
escreveu:

> Olá pessoal, tudo bem?
>
> estou escrevendo uma função para fazer algumas coisas:
>
> CREATE or REPLACE FUNCTION function_data_1(rows integer)
>
> RETURNS INTEGER AS $$
>
>
> declare
>
>   completed integer;
>
>   offset_num integer;
>
>   crtRow record;
>
>
> BEGIN
>
>   offset_num = 0;
>
>
> INSERT INTO table2_y_b (note_id, size, file_id, full_path)
>
> (
>
> SELECT
>
> t1.note_id,
>
> t1.size,
>
> t1.file_id,
>
> t1.full_path
>
> FROM
>
> table1_n_b t1
>
> JOIN
>
> table3_n_b t3 ON t3.file_id = t1.file_id
>
> );
>
>
>
> -- Copying the BLOBS into the table above (BACKUP)
>
> UPDATE table2_y_b t2 SET segment_data =
>
> (
>
> SELECT
>
> o1.data
>
> FROM
>
> original_table1_b o1
>
> JOIN
>
> table3_n_b t3 ON t3.file_id = o1.file_id
>
> WHERE
>
> t2.migrated = 0
>
> AND
>
> t2.file_id = o1.file_id
>
> );
>
>
> -- Update the migrated column from 0 to 1, for those rows that have been
> modified/copied.
>
> UPDATE table2_y_b SET migrated = 1 WHERE file_id = crtRow.file_id AND
> migrated = 0;
>
>
> UPDATE original_table1_b SET data = NULL WHERE file_id = crtRow.file_id;
>
>
> --RETURN file_id;
>
>
> END
>
>
> $$ language 'plpgsql';
>
>
> *Explicação:*
>
> CREATE or REPLACE FUNCTION function_data_1(rows integer)
>
> Quero poder chamar a função e especificar na hora quantas rows eu vou
> querer que sejam atingidas por ela. Por exemplo: select
> function_data_1(5000);
>
>
> INSERT INTO table2_y_b (note_id, size, file_id, full_path)
>> (
>> SELECT
>> t1.note_id,
>> t1.size,
>> t1.file_id,
>> t1.full_path
>> FROM
>> table1_n_b t1
>> JOIN
>> table3_n_b t3 ON t3.file_id = t1.file_id
>> );
>
> Estou inserindo dados na tabela table2_y_b. Estes dados são dados básicos
> para que depois eu armazene os BLOBS também *(FUNCIONANDO)*
>
> UPDATE table2_y_b t2 SET segment_data =
>> (
>> SELECT
>> o1.data
>> FROM
>> original_table1_b o1
>> JOIN
>> table3_n_b t3 ON t3.file_id = o1.file_id
>> WHERE
>> t2.migrated = 0
>> AND
>> t2.file_id = o1.file_id
>> );
>
> Aqui eu insiro os BLOBS - Sempre respeitando o file_id *(FUNCIONANDO)*
>
> UPDATE table2_y_b SET migrated = 1 WHERE file_id = crtRow.file_id AND
>> migrated = 0;
>
> Depois que os passos a cima estão completos, posso setar a column migrated
> como 1 - Isso quer dizer que aquela ROW foi manipulada com sucesso
>
> - Não sei como faço para que este update seja feito respeitando o update a
> cima. Como fazer a query saber que ela tem que atualizar somente as rows
> que foram alteradas pela query a cima?
>
>
>> UPDATE original_table1_b SET data = NULL WHERE file_id = crtRow.file_id;
>
> Como já tenho o backup dos dados ( table2_y_b ), posso agora setar o blob
> como NULL ( deletando ele )
>
> - Não sei como faço para que este update seja feito respeitando o update a
> cima. Como fazer a query saber que ela tem que atualizar somente as rows
> que foram alteradas pela query a cima?
>
>
>
>
> Não sei como faço para limitar a query, fazer com que ela só execute os
> procedimentos para as rows que eu quiser ( *select function_data_1(5000)*
> )
> Alguém pode dar uma mão?
>
> Obrigado!
> Patrick
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>

Bom dia
não seria fácil você colocar um limit no select que gera os inserts,
utilizando o parâmetro que chama a funcion?

algo assim:

  SELECT
o1.data
FROM
original_table1_b o1
JOIN
table3_n_b t3 ON t3.file_id = o1.file_id
WHERE
t2.migrated = 0
AND
t2.file_id = o1.file_id
limit *rows *
-- 

Douglas Fabiano Specht
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] pl/pgsql teste variavel data

2010-01-20 Por tôpico JotaComm
Olá,

2010/1/20 flavio fla...@atttransbordo.com.br

 Srs como fazer para testar se a funcao chamada recebeu os valores
 definidos como date?
 Esta dando erro de bad date no if

 funcao:

 CREATE OR REPLACE FUNCTION f_gera_fatura(date,date) returns text as '

 DECLARE
a_data_ini alias for $1;
a_data_fim alias for $2;

 BEGIN

 RAISE NOTICE 'Primeiro parâmetro: %',a_data_ini;

RAISE NOTICE 'Segundo parâmetro: %',a_data_fim;


IF (a_data_ini =  or a_data_ini IS NULL)
THEN
-- exige a data de inicio senão sai da funcao
texto_ret:= ''Especifique a data inicio'';
RETURN texto_ret;
END IF;

IF (a_data_fim =  or a_data_fim IS NULL)
THEN
-- exige a data fim senão sai da funcao
texto_ret:= ''Especifique a data fim'';
RETURN texto_ret;
END IF;
 ...

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



[]s
-- 
JotaComm
http://jotacomm.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] pl/pgsql teste variavel data

2010-01-20 Por tôpico Osvaldo Kussama
2010/1/20 flavio fla...@atttransbordo.com.br:
 Srs como fazer para testar se a funcao chamada recebeu os valores
 definidos como date?
 Esta dando erro de bad date no if

 funcao:

 CREATE OR REPLACE FUNCTION f_gera_fatura(date,date) returns text as '

 DECLARE
    a_data_ini alias for $1;
    a_data_fim alias for $2;

 BEGIN

    IF (a_data_ini =  or a_data_ini IS NULL)

Se você está declarando o parâmetro como sendo do tipo date ele
nunca será um string vazio.


    THEN
        -- exige a data de inicio senão sai da funcao
        texto_ret:= ''Especifique a data inicio'';
        RETURN texto_ret;
    END IF;

    IF (a_data_fim =  or a_data_fim IS NULL)

idem


    THEN
        -- exige a data fim senão sai da funcao
        texto_ret:= ''Especifique a data fim'';
        RETURN texto_ret;
    END IF;
 ...

Verifique se o parâmetro deve ser realmente do tipo date ou um texto
contendo a representação de uma data (que poderá ser convertida para o
tipo date) [1].

Osvaldo
[1] http://www.postgresql.org/docs/current/interactive/datatype-datetime.html
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] pl/pgsql teste variavel data

2010-01-20 Por tôpico flavio
Obrigado Osvaldo
Eu achava que ficasse em branco ou null.
Vou utilizar como texto depois eu trato a data...



___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL e o comando EXECUTE

2009-11-18 Por tôpico Wolak




O comando EXECUTE no trabalha com INTO... no seu caso a variavel
SUBTOTAL... voce precisa executar o FOR IN EXECUTE... 

Tenho exemplos se precisar.

Wolak.
Email/MSN: wo...@wolaksistemas.com.br






Daniel Falco escreveu:
Senhores,
  
Tenho a seguinte PROCEDURE:
  
  CREATE OR REPLACE FUNCTION
correg.somatorio_correicao(cod_resolucao integer, cod_membro integer,
cod_orgexecucao integer, data_inicial date, data_final date, cod_campos
integer[])
 RETURNS integer AS
$BODY$
DECLARE
 subtotal integer;
 total integer;
 tam_array integer;
 membro varchar;
 orgexecucao varchar;
BEGIN
 /*descobre o tamanho do array passado por parametro:*/
 tam_array := array_upper(cod_campos, 1);

 /*inicializa o contador*/
 total := 0;

 /*ajustando parametros na query*/
 membro := '';
 orgexecucao := '';

 if cod_membro = 0
 then
 membro := ' r.fk_tmpmembro = ' || cod_membro || ' and ';
 end if;

 if cod_orgexecucao = 0
 then
 orgexecucao := ' r.fk_tmporgaoexecucao = ' || cod_orgexecucao ||
' and ';
 end if;

 /*varredura no array:*/
 for i in 1..tam_array loop
 execute '
 select
 (select 
 sum(v.quantidade)
 from correg.valor v
 join correg.raf r on
 r.id
= v.fk_raf
 join rh.orgaoexecucao oe on
 oe.fk_orgao = r.fk_tmporgaoexecucao
 join rh.orgaoadministracao oa on
 oa.id
= oe.fk_orgaoadministracao
 join rh.comarca cx on
 cx.id
= oa.fk_comarca
 where
 v.fk_campo = c.id and
 (r.data between ' || data_inicial || ' and ' ||
data_final || ') and 
 ' || membro || '
 ' || orgexecucao || '
 r.excluido is false
 ) as quantidade
 into subtotal
 from correg.campo c
 where 
 c.excluido is false and
 c.fk_modelo = ' || cod_resolucao || '
 and c.id
= ' || cod_campos[i] || ';';

 /*vai construindo o valor total*/
 total := total + subtotal;
 end loop;

 /*retorna a soma dos codigos:*/
 return total;
END;
$BODY$
 LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION correg.somatorio_correicao(integer, integer, integer,
date, date, integer[]) OWNER TO postgres;
  
  
O banco de dados aceita o codigo acima sem acusar nenhum tipo de
problema, mas quando tento executar a query abaixo no pgadmin:
  
  select correg.somatorio_correicao(2, 0, 0, date
'2009-10-01', date '2009-11-01', array[1097,1098,1099,1100,1101,1102]);
  
  
O console de mensagens me retorna o seguinte erro:
  
  ERROR: EXECUTE of SELECT ... INTO is not
implemented yet
CONTEXT: PL/pgSQL function "somatorio_correicao" line 30 at execute
statement


** Erro **

ERROR: EXECUTE of SELECT ... INTO is not implemented yet
SQL state: 0A000
Contexto: PL/pgSQL function "somatorio_correicao" line 30 at execute
statement
  
  
A linha 30 est localizada antes do comentrio: /*varredura no
array:*/
  
A verso do banco que utilizo  a 8.1, creio que o comando EXECUTE no
seja compatvel com esta verso, algum conhece alguma alternativa para
o cdigo acima?
  
Grato,
Daniel
  
-- 
Atenciosamente,
Daniel Falco
  
Analista e Desenvolvedor de Software
  http://lattes.cnpq.br/2208735579737258
  http://embuar.blogspot.com
  http://twitter.com/embuar
  

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



__ Information from ESET NOD32 Antivirus, version of virus signature database 4618 (20091118) __

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com

  



__ Information from ESET NOD32 Antivirus, version of virus signature database 4618 (20091118) __

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com




___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL e o comando EXECUTE

2009-11-18 Por tôpico Gurgel, Flavio
Salve

 From: Daniel Falcão daniel.fal...@yahoo.com.br
  ** Erro **
 
  ERROR: EXECUTE of SELECT ... INTO is not implemented yet
  SQL state: 0A000
  Contexto: PL/pgSQL function somatorio_correicao line 30 at
 execute
  statement
 
 
 A linha 30 está localizada antes do comentário: */*varredura no
 array:*/*
 
 A versão do banco que utilizo é a 8.1, creio que o comando EXECUTE não
 seja
 compatível com esta versão, alguém conhece alguma alternativa para o
 código
 acima?

O EXECUTE é totalmente compatível. O que não é compatível é o SELECT ...INTO 
tabela
Substitua por INSERT INTO tabela SELECT...

[]s

Flavio Henrique A. Gurgel
Consultor -- 4Linux
tel. 55-11-2125.4765
fax. 55-11-2125.4777
www.4linux.com.br
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL e o comando EXECUTE

2009-11-18 Por tôpico JotaComm
Olá,


2009/11/18 Daniel Falcão daniel.fal...@yahoo.com.br

 Senhores,

 Tenho a seguinte PROCEDURE:

 CREATE OR REPLACE FUNCTION correg.somatorio_correicao(cod_resolucao
 integer, cod_membro integer, cod_orgexecucao integer, data_inicial date,
 data_final date, cod_campos integer[])
   RETURNS integer AS
 $BODY$
 DECLARE
subtotal integer;
total integer;
tam_array integer;
membro varchar;
orgexecucao varchar;
 BEGIN
/*descobre o tamanho do array passado por parametro:*/
tam_array := array_upper(cod_campos, 1);

/*inicializa o contador*/
total := 0;

/*ajustando parametros na query*/
membro := '';
orgexecucao := '';

if cod_membro = 0
then
   membro := ' r.fk_tmpmembro = ' || cod_membro || ' and ';
end if;

if cod_orgexecucao = 0
then
   orgexecucao := ' r.fk_tmporgaoexecucao = ' || cod_orgexecucao || '
 and ';
end if;

/*varredura no array:*/
for i in 1..tam_array loop
   execute '
   select
 (select
 sum(v.quantidade)
 from correg.valor v
 join correg.raf r on
 r.id = v.fk_raf
 join rh.orgaoexecucao oe on
 oe.fk_orgao = r.fk_tmporgaoexecucao
 join rh.orgaoadministracao oa on
 oa.id = oe.fk_orgaoadministracao
 join rh.comarca cx on
 cx.id = oa.fk_comarca
 where
 v.fk_campo = c.id and
 (r.data between ' || data_inicial || ' and ' || data_final
 || ') and
 ' || membro || '
 ' || orgexecucao || '
 r.excluido is false
 ) as quantidade
   into subtotal
   from correg.campo c
   where
 c.excluido is false and
 c.fk_modelo = ' || cod_resolucao || '
 and c.id = ' || cod_campos[i] || ';';

   /*vai construindo o valor total*/
   total := total + subtotal;
end loop;

/*retorna a soma dos codigos:*/
return total;
 END;
 $BODY$
   LANGUAGE 'plpgsql' VOLATILE;
 ALTER FUNCTION correg.somatorio_correicao(integer, integer, integer, date,
 date, integer[]) OWNER TO postgres;


 O banco de dados aceita o codigo acima sem acusar nenhum tipo de problema,
 mas quando tento executar a query abaixo no pgadmin:

 select correg.somatorio_correicao(2, 0, 0, date '2009-10-01', date
 '2009-11-01', array[1097,1098,1099,1100,1101,1102]);


 O console de mensagens me retorna o seguinte erro:

 ERROR:  EXECUTE of SELECT ... INTO is not implemented yet
 CONTEXT:  PL/pgSQL function somatorio_correicao line 30 at execute
 statement


 ** Erro **

 ERROR: EXECUTE of SELECT ... INTO is not implemented yet
 SQL state: 0A000
 Contexto: PL/pgSQL function somatorio_correicao line 30 at execute
 statement


 A linha 30 está localizada antes do comentário: */*varredura no array:*/*

 A versão do banco que utilizo é a 8.1, creio que o comando EXECUTE não seja
 compatível com esta versão, alguém conhece alguma alternativa para o código
 acima?



Você não consegue fazer um execute into, para isso é necessário executar o
for in execute.

Mais informações em 1:

[1]
http://www.postgresql.org/docs/8.3/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN


 Grato,
 Daniel

 --
 Atenciosamente,
 Daniel Falcão

 Analista e Desenvolvedor de Software
 http://lattes.cnpq.br/2208735579737258
 http://embuar.blogspot.com
 http://twitter.com/embuar

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
JotaComm
http://jotacomm.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL e o comando EXECUTE

2009-11-18 Por tôpico Daniel Falcão
Hum... é verdade, o problema está no INTO. Estava consultando a documentação
agora pouco, mas não estou encontrando bons exemplos para contornar isso.
Alguém aí pode me dar uma ajuda com esse FOR IN EXECUTE no contexto do
problema dessa minha procedure?

Grato,
Daniel

2009/11/18 Wolak wo...@wolaksistemas.com.br

  O comando EXECUTE não trabalha com INTO... no seu caso a variavel
 SUBTOTAL... voce precisa executar o FOR IN EXECUTE...

 Tenho exemplos se precisar.

 Wolak.
 Email/MSN: wo...@wolaksistemas.com.br






 Daniel Falcão escreveu:

 Senhores,

 Tenho a seguinte PROCEDURE:

 CREATE OR REPLACE FUNCTION correg.somatorio_correicao(cod_resolucao
 integer, cod_membro integer, cod_orgexecucao integer, data_inicial date,
 data_final date, cod_campos integer[])
   RETURNS integer AS
 $BODY$
 DECLARE
subtotal integer;
total integer;
tam_array integer;
membro varchar;
orgexecucao varchar;
 BEGIN
/*descobre o tamanho do array passado por parametro:*/
tam_array := array_upper(cod_campos, 1);

/*inicializa o contador*/
total := 0;

/*ajustando parametros na query*/
membro := '';
orgexecucao := '';

if cod_membro = 0
then
   membro := ' r.fk_tmpmembro = ' || cod_membro || ' and ';
end if;

if cod_orgexecucao = 0
then
   orgexecucao := ' r.fk_tmporgaoexecucao = ' || cod_orgexecucao || '
 and ';
end if;

/*varredura no array:*/
for i in 1..tam_array loop
   execute '
   select
 (select
 sum(v.quantidade)
 from correg.valor v
 join correg.raf r on
 r.id = v.fk_raf
 join rh.orgaoexecucao oe on
 oe.fk_orgao = r.fk_tmporgaoexecucao
 join rh.orgaoadministracao oa on
 oa.id = oe.fk_orgaoadministracao
 join rh.comarca cx on
 cx.id = oa.fk_comarca
 where
 v.fk_campo = c.id and
 (r.data between ' || data_inicial || ' and ' || data_final
 || ') and
 ' || membro || '
 ' || orgexecucao || '
 r.excluido is false
 ) as quantidade
   into subtotal
   from correg.campo c
   where
 c.excluido is false and
 c.fk_modelo = ' || cod_resolucao || '
 and c.id = ' || cod_campos[i] || ';';

   /*vai construindo o valor total*/
   total := total + subtotal;
end loop;

/*retorna a soma dos codigos:*/
return total;
 END;
 $BODY$
   LANGUAGE 'plpgsql' VOLATILE;
 ALTER FUNCTION correg.somatorio_correicao(integer, integer, integer, date,
 date, integer[]) OWNER TO postgres;


 O banco de dados aceita o codigo acima sem acusar nenhum tipo de problema,
 mas quando tento executar a query abaixo no pgadmin:

 select correg.somatorio_correicao(2, 0, 0, date '2009-10-01', date
 '2009-11-01', array[1097,1098,1099,1100,1101,1102]);


 O console de mensagens me retorna o seguinte erro:

 ERROR:  EXECUTE of SELECT ... INTO is not implemented yet
 CONTEXT:  PL/pgSQL function somatorio_correicao line 30 at execute
 statement


 ** Erro **

 ERROR: EXECUTE of SELECT ... INTO is not implemented yet
 SQL state: 0A000
 Contexto: PL/pgSQL function somatorio_correicao line 30 at execute
 statement


 A linha 30 está localizada antes do comentário: */*varredura no array:*/*

 A versão do banco que utilizo é a 8.1, creio que o comando EXECUTE não seja
 compatível com esta versão, alguém conhece alguma alternativa para o código
 acima?

 Grato,
 Daniel

 --
 Atenciosamente,
 Daniel Falcão

 Analista e Desenvolvedor de Software
 http://lattes.cnpq.br/2208735579737258
 http://embuar.blogspot.com
 http://twitter.com/embuar

 --

 ___
 pgbr-geral mailing 
 listpgbr-ge...@listas.postgresql.org.brhttps://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




 __ Information from ESET NOD32 Antivirus, version of virus signature 
 database 4618 (20091118) __

 The message was checked by ESET NOD32 Antivirus.
 http://www.eset.com



 __ Information from ESET NOD32 Antivirus, version of virus
 signature database 4618 (20091118) __

 The message was checked by ESET NOD32 Antivirus.

 http://www.eset.com

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Atenciosamente,
Daniel Falcão

Analista e Desenvolvedor de Software
http://lattes.cnpq.br/2208735579737258
http://embuar.blogspot.com
http://twitter.com/embuar
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL e o comando EXECUTE

2009-11-18 Por tôpico Wolak




Exemplo...

CREATE OR REPLACE FUNCTION fnc.codigotabela(pnTipoCodigo INTEGER,
   pcNomeCampo
 VARCHAR,
   pcTabela 
 VARCHAR,
  
pcValorCodigo VARCHAR)
RETURNS VARCHAR AS
$$
DECLARE
 rResultado RECORD;
BEGIN
 BEGIN
  IF pnTipoCodigo = 1 THEN
   IF COALESCE(pcValorCodigo,'0') = '0' THEN
FOR rResultado IN
EXECUTE 'SELECT MAX('||pcNomeCampo||'::INTEGER) AS
codigo FROM '||pcTabela||' WHERE uk =
fnc.regranegocio('||QUOTE_LITERAL(pcTabela)||','||pcTabela||'.fkempresa,'||pcTabela||'.fkfilial,'||pcTabela||'.fkunidade);'
LOOP
END LOOP;
RETURN COALESCE(rResultado.codigo,0)+1;
   END IF;
   RETURN pcValorCodigo;
  ELSIF pnTipoCodigo = 2 THEN
   FOR i IN 1..LENGTH(pcValorCodigo) LOOP
IF POSITION(SUBSTRING(pcValorCodigo,i,1) IN
'1234567890') = 0 THEN
 RAISE EXCEPTION 'Cdigo invlido!';
END IF;
   END LOOP;
   RETURN pcValorCodigo;
  ELSE
   RETURN pcValorCodigo;
  END IF;
  EXCEPTION WHEN others THEN RAISE EXCEPTION 'Cdigo invlido!';
 END;
 RETURN NULL;
END;
$$
LANGUAGE plpgsql;




Daniel Falco escreveu:
Hum...  verdade, o problema est no INTO. Estava
consultando a documentao agora pouco, mas no estou encontrando bons
exemplos para contornar isso. Algum a pode me dar uma ajuda com esse
"FOR IN EXECUTE" no contexto do problema dessa minha procedure?
  
Grato,
Daniel
  
  2009/11/18 Wolak wo...@wolaksistemas.com.br
  
O comando EXECUTE no
trabalha com INTO... no seu caso a variavel
SUBTOTAL... voce precisa executar o FOR IN EXECUTE... 

Tenho exemplos se precisar.

Wolak.
Email/MSN: wo...@wolaksistemas.com.br






Daniel Falco escreveu:

  
  Senhores,
  
Tenho a seguinte PROCEDURE:
  
  CREATE OR REPLACE FUNCTION
correg.somatorio_correicao(cod_resolucao integer, cod_membro integer,
cod_orgexecucao integer, data_inicial date, data_final date, cod_campos
integer[])
 RETURNS integer AS
$BODY$
DECLARE
 subtotal integer;
 total integer;
 tam_array integer;
 membro varchar;
 orgexecucao varchar;
BEGIN
 /*descobre o tamanho do array passado por parametro:*/
 tam_array := array_upper(cod_campos, 1);

 /*inicializa o contador*/
 total := 0;

 /*ajustando parametros na query*/
 membro := '';
 orgexecucao := '';

 if cod_membro = 0
 then
 membro := ' r.fk_tmpmembro = ' || cod_membro || ' and ';
 end if;

 if cod_orgexecucao = 0
 then
 orgexecucao := ' r.fk_tmporgaoexecucao = ' || cod_orgexecucao ||
' and ';
 end if;

 /*varredura no array:*/
 for i in 1..tam_array loop
 execute '
 select
 (select 
 sum(v.quantidade)
 from correg.valor v
 join correg.raf r on
 r.id
= v.fk_raf
 join rh.orgaoexecucao oe on
 oe.fk_orgao = r.fk_tmporgaoexecucao
 join rh.orgaoadministracao oa on
 oa.id
= oe.fk_orgaoadministracao
 join rh.comarca cx on
 cx.id
= oa.fk_comarca
 where
 v.fk_campo = c.id and
 (r.data between ' || data_inicial || ' and ' ||
data_final || ') and 
 ' || membro || '
 ' || orgexecucao || '
 r.excluido is false
 ) as quantidade
 into subtotal
 from correg.campo c
 where 
 c.excluido is false and
 c.fk_modelo = ' || cod_resolucao || '
 and c.id
= ' || cod_campos[i] || ';';

 /*vai construindo o valor total*/
 total := total + subtotal;
 end loop;

 /*retorna a soma dos codigos:*/
 return total;
END;
$BODY$
 LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION correg.somatorio_correicao(integer, integer, integer,
date, date, integer[]) OWNER TO postgres;
  
  
O banco de dados aceita o codigo acima sem acusar nenhum tipo de
problema, mas quando tento executar a query abaixo no pgadmin:
  
  select correg.somatorio_correicao(2, 0, 0, date
'2009-10-01', date '2009-11-01', array[1097,1098,1099,1100,1101,1102]);
  
  
O console de mensagens me retorna o seguinte erro:
  
  ERROR: EXECUTE of SELECT ... INTO is not
implemented yet
CONTEXT: PL/pgSQL function "somatorio_correicao" line 30 at execute
statement


** Erro **

ERROR: EXECUTE of SELECT ... INTO is not implemented yet
SQL state: 0A000
Contexto: PL/pgSQL function "somatorio_correicao" line 30 at execute
statement
  
  
A linha 30 est localizada antes do comentrio: /*varredura no
array:*/
  
A verso do banco que utilizo  a 8.1, creio que o comando EXECUTE no
seja compatvel com esta verso, algum conhece alguma alternativa para
o cdigo acima?
  
Grato,
Daniel
  
-- 
Atenciosamente,
Daniel Falco
  
Analista e Desenvolvedor de Software
  http://lattes.cnpq.br/2208735579737258
  http://embuar.blogspot.com
  http://twitter.com/embuar
  
  
  
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



__ Information from ESET NOD32 Antivirus, version of virus signature database 4618 (20091118) __

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com


Re: [pgbr-geral] PL/PGSQL e o comando EXECUTE

2009-11-18 Por tôpico Osvaldo Kussama
2009/11/18 Daniel Falcão daniel.fal...@yahoo.com.br:
 Senhores,

 Tenho a seguinte PROCEDURE:

 CREATE OR REPLACE FUNCTION correg.somatorio_correicao(cod_resolucao
 integer, cod_membro integer, cod_orgexecucao integer, data_inicial date,
 data_final date, cod_campos integer[])
   RETURNS integer AS
 $BODY$
 DECLARE
    subtotal integer;
    total integer;
    tam_array integer;
    membro varchar;
    orgexecucao varchar;
 BEGIN
    /*descobre o tamanho do array passado por parametro:*/
    tam_array := array_upper(cod_campos, 1);

    /*inicializa o contador*/
    total := 0;

    /*ajustando parametros na query*/
    membro := '';
    orgexecucao := '';

    if cod_membro = 0
    then
   membro := ' r.fk_tmpmembro = ' || cod_membro || ' and ';
    end if;

    if cod_orgexecucao = 0
    then
   orgexecucao := ' r.fk_tmporgaoexecucao = ' || cod_orgexecucao || '
 and ';
    end if;

    /*varredura no array:*/
    for i in 1..tam_array loop
   execute '
   select
     (select
     sum(v.quantidade)
     from correg.valor v
     join correg.raf r on
     r.id = v.fk_raf
     join rh.orgaoexecucao oe on
     oe.fk_orgao = r.fk_tmporgaoexecucao
     join rh.orgaoadministracao oa on
     oa.id = oe.fk_orgaoadministracao
     join rh.comarca cx on
     cx.id = oa.fk_comarca
     where
     v.fk_campo = c.id and
     (r.data between ' || data_inicial || ' and ' || data_final
 || ') and
     ' || membro || '
     ' || orgexecucao || '
     r.excluido is false
     ) as quantidade
   into subtotal
   from correg.campo c
   where
     c.excluido is false and
     c.fk_modelo = ' || cod_resolucao || '
     and c.id = ' || cod_campos[i] || ';';

   /*vai construindo o valor total*/
   total := total + subtotal;
    end loop;

    /*retorna a soma dos codigos:*/
    return total;
 END;
 $BODY$
   LANGUAGE 'plpgsql' VOLATILE;
 ALTER FUNCTION correg.somatorio_correicao(integer, integer, integer, date,
 date, integer[]) OWNER TO postgres;

 O banco de dados aceita o codigo acima sem acusar nenhum tipo de problema,
 mas quando tento executar a query abaixo no pgadmin:

 select correg.somatorio_correicao(2, 0, 0, date '2009-10-01', date
 '2009-11-01', array[1097,1098,1099,1100,1101,1102]);

 O console de mensagens me retorna o seguinte erro:

 ERROR:  EXECUTE of SELECT ... INTO is not implemented yet
 CONTEXT:  PL/pgSQL function somatorio_correicao line 30 at execute
 statement


 ** Erro **

 ERROR: EXECUTE of SELECT ... INTO is not implemented yet
 SQL state: 0A000
 Contexto: PL/pgSQL function somatorio_correicao line 30 at execute
 statement

 A linha 30 está localizada antes do comentário: /*varredura no array:*/

 A versão do banco que utilizo é a 8.1, creio que o comando EXECUTE não seja
 compatível com esta versão, alguém conhece alguma alternativa para o código
 acima?



Utilize o INTO no EXECUTE e não no SELECT:
EXECUTE 'SELECT ' INTO ...;
e não
EXECUTE 'SELECT... INTO...';

Diferença sutil aonde se aplica o INTO.

execute 'select
(select
sum(v.quantidade)
from correg.valor v
join correg.raf r on
r.id = v.fk_raf
join rh.orgaoexecucao oe on
oe.fk_orgao = r.fk_tmporgaoexecucao
join rh.orgaoadministracao oa on
oa.id = oe.fk_orgaoadministracao
join rh.comarca cx on
cx.id = oa.fk_comarca
where
v.fk_campo = c.id and
(r.data between ' || data_inicial || ' and ' ||
data_final || ') and
' || membro || '
' || orgexecucao || '
r.excluido is false
) as quantidade
  from correg.campo c
  where
c.excluido is false and
c.fk_modelo = ' || cod_resolucao || '
and c.id = ' || cod_campos[i] || ';'
into subtotal;

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL e o comando EXECUTE

2009-11-18 Por tôpico Daniel Falcão
Valeu galera,

Já entendi os exemplos, vou implementar a solução agora. Podem fechar o
tópico!

Grato,
Daniel

2009/11/18 Wolak wo...@wolaksistemas.com.br

  Exemplo...

 CREATE OR REPLACE FUNCTION fnc.codigotabela(pnTipoCodigo  INTEGER,
pcNomeCampo
  VARCHAR,
pcTabela
  VARCHAR,
pcValorCodigo
 VARCHAR)
 RETURNS VARCHAR AS
 $$
 DECLARE
*rResultado RECORD;*
 BEGIN
 BEGIN
 IF pnTipoCodigo = 1 THEN
 IF COALESCE(pcValorCodigo,'0') = '0' THEN
 FOR *rResultado *IN EXECUTE 'SELECT
 MAX('||pcNomeCampo||'::INTEGER) *AS codigo* FROM '||pcTabela||' WHERE uk =
 fnc.regranegocio('||QUOTE_LITERAL(pcTabela)||','||pcTabela||'.fkempresa,'||pcTabela||'.fkfilial,'||pcTabela||'.fkunidade);'
 LOOP
 END LOOP;
 RETURN COALESCE(*rResultado.codigo*,0)+1;
 END IF;
 RETURN pcValorCodigo;
 ELSIF pnTipoCodigo = 2 THEN
 FOR i IN 1..LENGTH(pcValorCodigo) LOOP
 IF POSITION(SUBSTRING(pcValorCodigo,i,1) IN '1234567890') =
 0 THEN
 RAISE EXCEPTION 'Código inválido!';
 END IF;
 END LOOP;
 RETURN pcValorCodigo;
 ELSE
 RETURN pcValorCodigo;
 END IF;
 EXCEPTION WHEN others THEN RAISE EXCEPTION 'Código inválido!';
 END;
 RETURN NULL;
 END;
 $$
 LANGUAGE plpgsql;




 Daniel Falcão escreveu:

 Hum... é verdade, o problema está no INTO. Estava consultando a
 documentação agora pouco, mas não estou encontrando bons exemplos para
 contornar isso. Alguém aí pode me dar uma ajuda com esse FOR IN EXECUTE no
 contexto do problema dessa minha procedure?

 Grato,
 Daniel

 2009/11/18 Wolak wo...@wolaksistemas.com.br

 O comando EXECUTE não trabalha com INTO... no seu caso a variavel
 SUBTOTAL... voce precisa executar o FOR IN EXECUTE...

 Tenho exemplos se precisar.

 Wolak.
 Email/MSN: wo...@wolaksistemas.com.br






 Daniel Falcão escreveu:

  Senhores,

 Tenho a seguinte PROCEDURE:

 CREATE OR REPLACE FUNCTION correg.somatorio_correicao(cod_resolucao
 integer, cod_membro integer, cod_orgexecucao integer, data_inicial date,
 data_final date, cod_campos integer[])
   RETURNS integer AS
 $BODY$
 DECLARE
subtotal integer;
total integer;
tam_array integer;
membro varchar;
orgexecucao varchar;
 BEGIN
/*descobre o tamanho do array passado por parametro:*/
tam_array := array_upper(cod_campos, 1);

/*inicializa o contador*/
total := 0;

/*ajustando parametros na query*/
membro := '';
orgexecucao := '';

if cod_membro = 0
then
   membro := ' r.fk_tmpmembro = ' || cod_membro || ' and ';
end if;

if cod_orgexecucao = 0
then
   orgexecucao := ' r.fk_tmporgaoexecucao = ' || cod_orgexecucao || '
 and ';
end if;

/*varredura no array:*/
for i in 1..tam_array loop
   execute '
   select
 (select
 sum(v.quantidade)
 from correg.valor v
 join correg.raf r on
 r.id = v.fk_raf
 join rh.orgaoexecucao oe on
 oe.fk_orgao = r.fk_tmporgaoexecucao
 join rh.orgaoadministracao oa on
 oa.id = oe.fk_orgaoadministracao
 join rh.comarca cx on
 cx.id = oa.fk_comarca
 where
 v.fk_campo = c.id and
 (r.data between ' || data_inicial || ' and ' ||
 data_final || ') and
 ' || membro || '
 ' || orgexecucao || '
 r.excluido is false
 ) as quantidade
   into subtotal
   from correg.campo c
   where
 c.excluido is false and
 c.fk_modelo = ' || cod_resolucao || '
 and c.id = ' || cod_campos[i] || ';';

   /*vai construindo o valor total*/
   total := total + subtotal;
end loop;

/*retorna a soma dos codigos:*/
return total;
 END;
 $BODY$
   LANGUAGE 'plpgsql' VOLATILE;
 ALTER FUNCTION correg.somatorio_correicao(integer, integer, integer,
 date, date, integer[]) OWNER TO postgres;


 O banco de dados aceita o codigo acima sem acusar nenhum tipo de problema,
 mas quando tento executar a query abaixo no pgadmin:

 select correg.somatorio_correicao(2, 0, 0, date '2009-10-01', date
 '2009-11-01', array[1097,1098,1099,1100,1101,1102]);


 O console de mensagens me retorna o seguinte erro:

 ERROR:  EXECUTE of SELECT ... INTO is not implemented yet
 CONTEXT:  PL/pgSQL function somatorio_correicao line 30 at execute
 statement


 ** Erro **

 ERROR: EXECUTE of SELECT ... INTO is not implemented yet
 SQL state: 0A000
 Contexto: PL/pgSQL function somatorio_correicao line 30 at execute
 statement


 A linha 30 está localizada antes do 

Re: [pgbr-geral] PL/PGSQL

2007-06-05 Por tôpico Sebastian SWC

vlw pela força!

On 6/5/07, Joao [EMAIL PROTECTED] wrote:


 foi mal esqueci vo tentar fazer em C aqui e te mando

- Original Message -
*From:* Sebastian SWC [EMAIL PROTECTED]
*To:* Comunidade PostgreSQL Brasileirapgbr-geral@listas.postgresql.org.br
*Sent:* Monday, June 04, 2007 6:27 PM
*Subject:* Re: [pgbr-geral] PL/PGSQL

eu sei joão, agradeço muito pelo modelo.

só não vou utilizar-lo pq preciso de um script que rode no windows

On 6/4/07, Joao  [EMAIL PROTECTED] wrote:

  po ja fiz o exemplo em shell script ta ai na lista

 - Original Message -
 *From:* Sebastian SWC [EMAIL PROTECTED]
 *To:* Comunidade PostgreSQL Brasileirapgbr-geral@listas.postgresql.org.br
 *Sent:* Monday, June 04, 2007 11:04 AM
 *Subject:* Re: [pgbr-geral] PL/PGSQL

 sim sim, entendi.

 vou dar uma procurada pra ver como faço um programa em c pra fazer isso.

 obrigado pela atenção e valeu pela força.

 On 6/1/07, Euler Taveira de Oliveira [EMAIL PROTECTED] wrote:
 
  Sebastian SWC wrote:
 
   vou tentar demonstrar o que quiz dizer:
  
   rodei isso numa base de dados que não tem plpgsql instalada:
  
  Eu não disse isso. Eu falei para usar a primeira opção que seria
  implementar na sua linguagem de programação uma estrutura de controle
  (if) que recebe como parâmetro o valor do SELECT [1] e decide se vai
  criar a linguagem PL/pgSQL. Ficou claro agora?
 
  [1] SELECT lanname FROM pg_language WHERE lanispl IS TRUE;
 
 
  --
Euler Taveira de Oliveira
http://www.timbira.com/
  ___
  pgbr-geral mailing list
  pgbr-geral@listas.postgresql.org.br
  https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
 



 --
 Atenciosamente,
 Sebastian Selau Webber Colombo

 Acessem e participem do fórum de postgresql brazuca:
 http://postgresql.blog.br/forum/

 Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
 bondade.
 Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
 conhecida por todos os povos.

 --

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




--
Atenciosamente,
Sebastian Selau Webber Colombo

Acessem e participem do fórum de postgresql brazuca: 
http://postgresql.blog.br/forum/


Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.

--

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





--
Atenciosamente,
Sebastian Selau Webber Colombo

Acessem e participem do fórum de postgresql brazuca:
http://postgresql.blog.br/forum/

Vou morrer feliz se um dia for 10% do homem que meu pai é. =)
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-06-04 Por tôpico Sebastian SWC

sim sim, entendi.

vou dar uma procurada pra ver como faço um programa em c pra fazer isso.

obrigado pela atenção e valeu pela força.

On 6/1/07, Euler Taveira de Oliveira [EMAIL PROTECTED] wrote:


Sebastian SWC wrote:

 vou tentar demonstrar o que quiz dizer:

 rodei isso numa base de dados que não tem plpgsql instalada:

Eu não disse isso. Eu falei para usar a primeira opção que seria
implementar na sua linguagem de programação uma estrutura de controle
(if) que recebe como parâmetro o valor do SELECT [1] e decide se vai
criar a linguagem PL/pgSQL. Ficou claro agora?

[1] SELECT lanname FROM pg_language WHERE lanispl IS TRUE;


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





--
Atenciosamente,
Sebastian Selau Webber Colombo

Acessem e participem do fórum de postgresql brazuca:
http://postgresql.blog.br/forum/

Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-06-04 Por tôpico Sebastian SWC

eu sei joão, agradeço muito pelo modelo.

só não vou utilizar-lo pq preciso de um script que rode no windows

On 6/4/07, Joao [EMAIL PROTECTED] wrote:


 po ja fiz o exemplo em shell script ta ai na lista

- Original Message -
*From:* Sebastian SWC [EMAIL PROTECTED]
*To:* Comunidade PostgreSQL Brasileirapgbr-geral@listas.postgresql.org.br
*Sent:* Monday, June 04, 2007 11:04 AM
*Subject:* Re: [pgbr-geral] PL/PGSQL

sim sim, entendi.

vou dar uma procurada pra ver como faço um programa em c pra fazer isso.

obrigado pela atenção e valeu pela força.

On 6/1/07, Euler Taveira de Oliveira [EMAIL PROTECTED] wrote:

 Sebastian SWC wrote:

  vou tentar demonstrar o que quiz dizer:
 
  rodei isso numa base de dados que não tem plpgsql instalada:
 
 Eu não disse isso. Eu falei para usar a primeira opção que seria
 implementar na sua linguagem de programação uma estrutura de controle
 (if) que recebe como parâmetro o valor do SELECT [1] e decide se vai
 criar a linguagem PL/pgSQL. Ficou claro agora?

 [1] SELECT lanname FROM pg_language WHERE lanispl IS TRUE;


 --
   Euler Taveira de Oliveira
   http://www.timbira.com/
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




--
Atenciosamente,
Sebastian Selau Webber Colombo

Acessem e participem do fórum de postgresql brazuca:
http://postgresql.blog.br/forum/

Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.

--

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





--
Atenciosamente,
Sebastian Selau Webber Colombo

Acessem e participem do fórum de postgresql brazuca:
http://postgresql.blog.br/forum/

Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-06-01 Por tôpico Euler Taveira de Oliveira
Sebastian SWC wrote:

 vou tentar demonstrar o que quiz dizer:
 
 rodei isso numa base de dados que não tem plpgsql instalada:
 
Eu não disse isso. Eu falei para usar a primeira opção que seria
implementar na sua linguagem de programação uma estrutura de controle
(if) que recebe como parâmetro o valor do SELECT [1] e decide se vai
criar a linguagem PL/pgSQL. Ficou claro agora?

[1] SELECT lanname FROM pg_language WHERE lanispl IS TRUE;


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-05-31 Por tôpico Euler Taveira de Oliveira
Sebastian SWC wrote:
 pessoal, como posso criar um script (sql) que valide se a base de dados
 do postgres já possúi instalada a linguagem procedural plpgsql ?
 

regression=# create language plperl;
CREATE LANGUAGE
regression=# select lanname from pg_language where lanispl;
 lanname
-
 plpgsql
 plperl
(2 registros)

Veja se uma função assim ajuda. Claro que algum tratamento deve ser feito.

CREATE OR REPLACE FUNCTION testapl(a varchar) RETURNS void AS
$$
DECLARE
r VARCHAR;
BEGIN
SELECT lanname INTO r FROM pg_catalog.pg_language WHERE lanispl
AND lanname = a;
IF r IS NULL THEN
EXECUTE 'CREATE LANGUAGE ' || a;
END IF;
END;
$$ LANGUAGE 'plpgsql';



-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-05-31 Por tôpico Sebastian SWC

a idéia é essa, só que, meu problema é justo esse. eu preciso criar a
linguagem plpgsql se ela não tiver instalada, e a tua função é em plpgsql...

pra ficar mais claro, vou explicar o que fiz quem sabe, isso acaba se
tornando desnecessário... ok?

criei 3 funções para tratar dos índices, tipo, uma função cadastra os
creates dos índices em um tabela, uma apaga todos eles (óbviamente, ela é
chamada depois de fazer esse backup) e depois de tudo, um função que
executa o create index (que já estava cadastrado em uma tabela.

fiz isso por que estou convertendo uma base de dados dbf para o pg. a
aplicação que vai utilizar é feita no genexus e o genexus é um montruoso
criador de índices, todas as consultas com ordenação diferente, ele cria
um índice temporáriamente, ou permanentemente (se o desenvoldor assim achar
melhor). por isso, faço um backup dos índices, apago eles, importo e depois
re-crio os indices que a aplicação muito utiliza.

vlw!

On 5/31/07, Euler Taveira de Oliveira [EMAIL PROTECTED] wrote:


Sebastian SWC wrote:
 pessoal, como posso criar um script (sql) que valide se a base de dados
 do postgres já possúi instalada a linguagem procedural plpgsql ?


regression=# create language plperl;
CREATE LANGUAGE
regression=# select lanname from pg_language where lanispl;
lanname
-
plpgsql
plperl
(2 registros)

Veja se uma função assim ajuda. Claro que algum tratamento deve ser feito.

CREATE OR REPLACE FUNCTION testapl(a varchar) RETURNS void AS
$$
DECLARE
r VARCHAR;
BEGIN
SELECT lanname INTO r FROM pg_catalog.pg_language WHERE lanispl
AND lanname = a;
IF r IS NULL THEN
EXECUTE 'CREATE LANGUAGE ' || a;
END IF;
END;
$$ LANGUAGE 'plpgsql';



--
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





--
Atenciosamente,
Sebastian Selau Webber Colombo

Acessem e participem: http://postgresql.blog.br/forum/

Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-05-31 Por tôpico Euler Taveira de Oliveira
Sebastian SWC wrote:

 a idéia é essa, só que, meu problema é justo esse. eu preciso criar a
 linguagem plpgsql se ela não tiver instalada, e a tua função é em plpgsql...
 
Eu mostrei duas alternativas. Que tal usar a primeira? Um simples SELECT
e um if ... CREATE LANGUAGE.


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-05-30 Por tôpico Joao
Se puder ser em shell script ta ai na mao!



#!/bin/bash

RESULTADO=$(psql -U postgres -t -h hostname  -c SELECT count(*) from 
pg_language where lanname='plpgsql' and lanispl='t'; nome_do_banco | tr -d ' ')

if [ $RESULTADO == 0 ]
then
echo /usr/local/pgsql/bin/createlang -U postgres -h hostname plpgsql 
nomedobanco
else
echo plpgsql ja instalado;
fi












  - Original Message - 
  From: Sebastian SWC 
  To: Comunidade PostgreSQL Brasileira 
  Sent: Wednesday, May 30, 2007 12:00 PM
  Subject: [pgbr-geral] PL/PGSQL


  pessoal, como posso criar um script (sql) que valide se a base de dados do 
postgres já possúi instalada a linguagem procedural plpgsql ?

  alguma coisa que lembre isso:

  IF tem_plpgsql_instalado_? = 'NAO' 
// comando para instalar...
  ELSE
// nem precisa de else, é só pra ilustrar mesmo
  END

  abraço!

  -- 
  Atenciosamente,
  Sebastian Selau Webber Colombo

  Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com 
bondade. 
  Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será 
conhecida por todos os povos. 


--


  ___
  pgbr-geral mailing list
  pgbr-geral@listas.postgresql.org.br
  https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-05-30 Por tôpico Sebastian SWC

pois é, não pode eu vou usar no windows... =(

será que tem como fazer via sql? quero colocar entre os scripts de criar as
PLs...

On 5/30/07, Joao [EMAIL PROTECTED] wrote:


 Se puder ser em shell script ta ai na mao!



#!/bin/bash

RESULTADO=$(psql -U postgres -t -h hostname  -c SELECT count(*) from
pg_language where lanname='plpgsql' and lanispl='t'; nome_do_banco | tr -d
' ')

if [ $RESULTADO == 0 ]
then
echo /usr/local/pgsql/bin/createlang -U postgres -h hostname
plpgsql nomedobanco
else
echo plpgsql ja instalado;
fi













- Original Message -
*From:* Sebastian SWC [EMAIL PROTECTED]
*To:* Comunidade PostgreSQL Brasileirapgbr-geral@listas.postgresql.org.br
*Sent:* Wednesday, May 30, 2007 12:00 PM
*Subject:* [pgbr-geral] PL/PGSQL

pessoal, como posso criar um script (sql) que valide se a base de dados do
postgres já possúi instalada a linguagem procedural plpgsql ?

alguma coisa que lembre isso:

IF tem_plpgsql_instalado_? = 'NAO'
  // comando para instalar...
ELSE
  // nem precisa de else, é só pra ilustrar mesmo
END

abraço!

--
Atenciosamente,
Sebastian Selau Webber Colombo

Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.

--

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





--
Atenciosamente,
Sebastian Selau Webber Colombo

Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PL/PGSQL

2007-05-30 Por tôpico Sebastian SWC

por favor joão, me indica alguma documentação pra que eu possa ver melhor
isso, acredito que seja o único jeito mesmo.  vlw!

On 5/30/07, Joao [EMAIL PROTECTED] wrote:


 entao faz em C :P

- Original Message -
*From:* Sebastian SWC [EMAIL PROTECTED]
*To:* Comunidade PostgreSQL Brasileirapgbr-geral@listas.postgresql.org.br
*Sent:* Wednesday, May 30, 2007 4:04 PM
*Subject:* Re: [pgbr-geral] PL/PGSQL

pois é, não pode eu vou usar no windows... =(

será que tem como fazer via sql? quero colocar entre os scripts de criar
as PLs...

On 5/30/07, Joao [EMAIL PROTECTED] wrote:

  Se puder ser em shell script ta ai na mao!



 #!/bin/bash

 RESULTADO=$(psql -U postgres -t -h hostname  -c SELECT count(*) from
 pg_language where lanname='plpgsql' and lanispl='t'; nome_do_banco | tr -d
 ' ')

 if [ $RESULTADO == 0 ]
 then
 echo /usr/local/pgsql/bin/createlang -U postgres -h hostname
 plpgsql nomedobanco
 else
 echo plpgsql ja instalado;
 fi













  - Original Message -
 *From:* Sebastian SWC [EMAIL PROTECTED]
 *To:* Comunidade PostgreSQL Brasileirapgbr-geral@listas.postgresql.org.br
 *Sent:* Wednesday, May 30, 2007 12:00 PM
 *Subject:* [pgbr-geral] PL/PGSQL

 pessoal, como posso criar um script (sql) que valide se a base de dados
 do postgres já possúi instalada a linguagem procedural plpgsql ?

 alguma coisa que lembre isso:

 IF tem_plpgsql_instalado_? = 'NAO'
   // comando para instalar...
 ELSE
   // nem precisa de else, é só pra ilustrar mesmo
 END

 abraço!

 --
 Atenciosamente,
 Sebastian Selau Webber Colombo

 Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
 bondade.
 Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
 conhecida por todos os povos.

 --

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




--
Atenciosamente,
Sebastian Selau Webber Colombo

Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.

--

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





--
Atenciosamente,
Sebastian Selau Webber Colombo

Sl 67.1-2: Ó Deus, tem misericórdia de nós e abençoa-nos! Trata-nos com
bondade.
Assim o mundo inteiro conhecerá a tua vontade, e a tua salvação será
conhecida por todos os povos.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral