Discussion:
case com alter table
Pedro Costa
2012-04-17 09:12:09 UTC
Permalink
Pessoal,

É possível usar o case com um alter table?

Tipo assim:

alter table rua

case n_rua exists (SELECT attname FROM pg_attribute WHERE attrelid =
(SELECT oid FROM pg_class WHERE relname = 'ruas') AND attname = 'n_rua')

then add column largura double precision,add column tipologia text,add
column declive double precision

else alter table ruas add column n_rua integer,



Obrigado
Fabiano Abreu
2012-04-17 12:23:02 UTC
Permalink
*Olá Pedro.*
*
*
*Creio que isto não seja possível, observando a documentação do PostgreSQL
tal condição não é prevista, imagino que em nenhum banco de dados.*
*
*
*Mas com isto, não posso afirmar que não é possível, talvez seja, de uma
forma desconhecida.*
*
*
http://www.postgresql.org/docs/8.1/static/sql-altertable.html
*
*Atenciosamente
_ _
*Fabiano Abreu*
*Papo Sql <http://paposql.blogspot.com> - Um blog com tutoriais, dicas e
truques sobre Sql
*
Post by Pedro Costa
Pessoal,
É possível usar o case com um alter table?
alter table rua
case n_rua exists (SELECT attname FROM pg_attribute WHERE attrelid =
(SELECT oid FROM pg_class WHERE relname = 'ruas') AND attname = 'n_rua')
then add column largura double precision,add column tipologia text,add
column declive double precision
else alter table ruas add column n_rua integer,
Obrigado
_______________________________________________
pgbr-geral mailing list
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Pedro Costa
2012-04-17 15:13:52 UTC
Permalink
Obrigado Fábio.
Já desconfiava.....

Abraço
/Olá Pedro./
/
/
/Creio que isto não seja possível, observando a documentação do
PostgreSQL tal condição não é prevista, imagino que em nenhum banco de
dados./
/
/
/Mas com isto, não posso afirmar que não é possível, talvez seja, de
uma forma desconhecida./
/
/
http://www.postgresql.org/docs/8.1/static/sql-altertable.html
/
/Atenciosamente
_ _
/*Fabiano Abreu*/
/Papo Sql <http://paposql.blogspot.com> - Um blog com tutoriais, dicas
e truques sobre Sql
/
Pessoal,
É possível usar o case com um alter table?
alter table rua
case n_rua exists (SELECT attname FROM pg_attribute WHERE attrelid =
(SELECT oid FROM pg_class WHERE relname = 'ruas') AND attname =
'n_rua')
then add column largura double precision,add column tipologia text,add
column declive double precision
else alter table ruas add column n_rua integer,
Obrigado
_______________________________________________
pgbr-geral mailing list
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Matheus de Oliveira
2012-04-17 15:31:22 UTC
Permalink
Post by Pedro Costa
Obrigado Fábio.
Já desconfiava.....
Abraço
*Olá Pedro.*
*
*
*Creio que isto não seja possível, observando a documentação do
PostgreSQL tal condição não é prevista, imagino que em nenhum banco de
dados.*
*
*
*Mas com isto, não posso afirmar que não é possível, talvez seja, de uma
forma desconhecida.*
*
*
http://www.postgresql.org/docs/8.1/static/sql-altertable.html
*
*Atenciosamente
_ _
*Fabiano Abreu*
*Papo Sql <http://paposql.blogspot.com> - Um blog com tutoriais, dicas e
truques sobre Sql
*
Post by Pedro Costa
Pessoal,
É possível usar o case com um alter table?
alter table rua
case n_rua exists (SELECT attname FROM pg_attribute WHERE attrelid =
(SELECT oid FROM pg_class WHERE relname = 'ruas') AND attname = 'n_rua')
then add column largura double precision,add column tipologia text,add
column declive double precision
else alter table ruas add column n_rua integer,
Obrigado
_______________________________________________
pgbr-geral mailing list
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
_______________________________________________
pgbr-geral mailing list
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Você pode fazer isso dentro de uma stored procedure, mais ou menos assim:

create or replace procedure insere_campo()
returns void
language plpgsql
as $$
begin
if exists (SELECT attname FROM pg_attribute WHERE attrelid = (SELECT
oid FROM pg_class WHERE relname = 'ruas') AND attname = 'n_rua') then
alter table rua
add column largura double precision,
add column tipologia text,
add column declive double precision;
else
alter table ruas add column n_rua integer;
end if;
end;
$$;

Ou até num bloco anônimo:

do language plpgsql $$
-- mesmo código acima...
$$;

Atenciosamente,
--
Matheus de Oliveira

Bacharelado em Ciências de Computação
Laboratório de Computação de Alto Desempenho -
LCAD<http://www.lcad.icmc.usp.br/>
Instituto de Ciências Matemáticas e de Computação -
ICMC<http://www.icmc.usp.br/>
Universidade de São Paulo - USP <http://www.sc.usp.br/>
p***@sapo.pt
2012-04-18 09:47:11 UTC
Permalink
Content-Type: text/plain; charset="iso-8859-1"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Irineu
2012-04-18 10:56:30 UTC
Permalink
Post by Pedro Costa
Pessoal,
É possível usar o case com um alter table?
alter table rua
case n_rua exists (SELECT attname FROM pg_attribute WHERE attrelid =
(SELECT oid FROM pg_class WHERE relname = 'ruas') AND attname = 'n_rua')
then add column largura double precision,add column tipologia text,add
column declive double precision
else alter table ruas add column n_rua integer,
poderias usar o comando SQL dentro de uma função usando EXECUTE :

EXECUTE 'ALTER TABLE ruas'
CASE WHEN EXISTS (SELECT attname FROM pg_attribute WHERE attrelid =
(SELECT oid FROM pg_class WHERE relname = 'ruas') AND attname = 'n_rua')
THEN ' ADD column largura double precision;'
ELSE ' ADD column n_rua integer;' END;
--
Irineu Raymundo
Programador/Consultor Técnico
Senda Engenharia de Dados Ltda.
Continue reading on narkive:
Loading...