Re: [pgbr-geral] pl/pgsql function - Postgres 9.2
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
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
> > >> > 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
Em 2 de junho de 2016 01:10, Patrick Bakerescreveu: > 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
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/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
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
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
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
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
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
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 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
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
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
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
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
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
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
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
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
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
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
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