19
jul
07

Importando Schema de Oracle Spatial

Se, ao importar um schema de Oracle Spatial do Oracle 9i, ocorrerem os erros IMP-00088 e IMP-00103, não se assustem!! Basta setar a variável de ambiente NLS_LANG para AMERICAN_AMERICA.<characterset> antes de fazer o export e depois é só importar tranquilamente. Vejam abaixo um trecho do erro comum nestes casos:

..

..

IMP-00088: Problem importing metadata for index EMPLOYEE_INDX. Index creation will be skipped
IMP-00017: following statement failed with ORACLE error 6550:
“BEGIN ”
“declare schema_name varchar2(200); username varchar2(64); begin execute i”
“mmediate ‘select sys_context(”userenv”, ”CURRENT_SCHEMA”) from dual ‘”
” into schema_name; execute immediate ‘select user from dual ‘ into userna”
“me; if username != schema_name then mdsys.sdo_meta.change_all_sdo_geom_”
“metadata(schema_name, ‘CONCURRENT’,’THE_GEOM’,mdsys.SDO_dim_array(MDSYS.SDO_DIM_”
“ELEMENT(‘X’,-422545,16,568964,42,,00000005),MDSYS.SDO_DIM_ELEMENT(‘Y’,89426”
“04,91,,00000005)),82313) ; else execute immediate ”
“‘INSERT INTO USER_SDO_GEOM_METADATA values (”CONCURRENT”,”THE_GEOM”,mdsys.SD”
“O_dim_array(MDSYS.SDO_DIM_ELEMENT(”X”,422545,42,,00000005),MDS”
“YS.SDO_DIM_ELEMENT(”Y”,8942604,91,,00000005)),82313) ‘ ”
“; end if; end; ”
“COMMIT; END;”
IMP-00003: ORACLE error 6550 encountered
ORA-06550: linha 2, coluna 409:
PLS-00103: Encontrado o simbolo “,” quando um dos seguintes simbolos era esperado:

( – + case mod new not null others <um identificador>
<um identificador delimitado por aspas duplas>
<uma variavel de ligac?o> avg count current exists max min
prior sql stddev sum variance execute forall merge time
timestamp interval date
<um literal de string com especificac?o de conjunto de caracteres>
<um numero> <uma string SQL com aspas simples> pipe
<um literal
..

..

Vamos nos aprofundar nesse erro. O ponto exato do problema está na forma como o Oracle, na importação, utiliza a procedure mdsys.sdo_dim_element. Vejam abaixo o detalhe:

mdsys.sdo_meta.change_all_sdo_geom_metadata(schema_name, ‘CONCURRENT’, ‘THE_GEOM’, mdsys.SDO_dim_array(MDSYS.SDO_DIM_ELEMENT(‘X’,422545,42,,00000005), MDSYS.SDO_DIM_ELEMENT(‘Y’,8942604,91,,00000005)),82313) ;

Observem no final da segunda linha, a parte em que aparece “42,,00000005),”… Na verdade, não deveria aparecer 2 (duas) vírgulas nesse ponto e sim, “42,.00000005),”, ou seja, é apenas um erro de formatação dos números decimais, por esse motivo que devemos sempre setar o NLS_LANG antes de fazermos os exports para schemas de Oracle Spatial. Outro detlahe, a function mdsys.sdo_dim_element, tem sua assinatura com apenas 4 (quatro) parâmetros. Vejam abaixo o trecho corrigido:

mdsys.sdo_meta.change_all_sdo_geom_metadata(schema_name, ‘CONCURRENT’, ‘THE_GEOM’, mdsys.SDO_dim_array(MDSYS.SDO_DIM_ELEMENT(‘X’,422545,42,.00000005), MDSYS.SDO_DIM_ELEMENT(‘Y’,8942604,91,.00000005)),82313) ;

Até a próxima…


1 Response to “Importando Schema de Oracle Spatial”



Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: