Pessoal,
Tenho, em uma base Oracle, uma tabela de Municípios Brasileiros com os seguintes campos :
CREATE TABLE "SCA"."MUNICIPIOS_BRASILEIROS"
( "MUN_CODIGO" NUMBER(8,0),
"MUN_NOME" VARCHAR2(100),
"MUN_NOME_SEM_FORMATACAO" VARCHAR2(100) NOT NULL ENABLE,
"MUN_UF" CHAR(2) NOT NULL ENABLE,
"MUN_REGIAO" CHAR(2),
"MUN_LATITUDE" NUMBER(7,5),
"MUN_LONGITUDE" NUMBER(7,5),
CONSTRAINT "PK_MUNICIPIOS_BRASILEIROS" PRIMARY KEY ("MUN_CODIGO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ENABLE,
CONSTRAINT "FK_ESTADOS" FOREIGN KEY ("MUN_UF")
REFERENCES "SCA"."ESTADOS" ("EST_UF") ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ;
Então, criei uma tabela no PostgreSQL, com os tipos de dados das colunas o mais próximo possível das colunas da tabela em Oracle, da seguinte forma :
-- Table: municipios_brasileiros
-- DROP TABLE municipios_brasileiros;
CREATE TABLE municipios_brasileiros
(
mun_codigo numeric(8) NOT NULL,
mun_nome character varying(100),
mun_nome_sem_formatacao character varying(100) NOT NULL,
mun_uf character(2) NOT NULL,
mun_regiao character varying(2),
mun_latitude numeric(7,5),
mun_longitude numeric(7,5),
CONSTRAINT pk_municipios PRIMARY KEY (mun_codigo),
CONSTRAINT fk_munc_estados FOREIGN KEY (mun_uf)
REFERENCES estados ("EST_UF") MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (OIDS=FALSE);
ALTER TABLE municipios_brasileiros OWNER TO role_diploma;
A linha abaixo é um trecho do script gerado pelo Oracle com o dump da tabela de municipios.
...
insert into municipios_brasileiros (MUN_CODIGO, MUN_NOME, MUN_NOME_SEM_FORMATACAO, MUN_UF, MUN_REGIAO, MUN_LATITUDE, MUN_LONGITUDE)
values (210455, 'Governador Edison Lobão', 'GOVERNADOR EDISON LOBAO', 'MA', 'NE', -5,74947, -47,36139);
...
Se eu tentar rodar trecho do script acima da forma com ele está no PostgreSQL, está aparecendo a seguinte mensagem de erro :
ERROR: INSERT has more expressions than target columns
********** Erro **********
ERROR: INSERT has more expressions than target columns
SQL state: 42601
Só consegui inserir o registro acima, modificando os valores das duas últimas colunas, “mun_latitudade” e “mun_longitude”, trocando o separador de decimal, de “,”, para “.”,
da seguinte forma :
...
insert into municipios_brasileiros (MUN_CODIGO, MUN_NOME, MUN_NOME_SEM_FORMATACAO, MUN_UF, MUN_REGIAO, MUN_LATITUDE, MUN_LONGITUDE)
values (210455, 'Governador Edison Lobão', 'GOVERNADOR EDISON LOBAO', 'MA', 'NE', -5.74947, -47.36139);
...
Então a minha dúvida é : como configurar o PostgreSQL para que o mesmo utilize a “,” como separador de casas decimais.
Com isto, eu evitaria ter que editar manualmente o script gerado pelo Oracle, e os sepadores de decimais de latitude e longitude de mais de 5.000 municípios brasileiros.
Agradece,
Max Carvalho