17 out

[Oracle] Criando índice espacial SIRGAS 2000

Segue a criação do índice espacial para SIRGAS 2000.

INSERT INTO mdsys.cs_srs 
(
    cs_name,
    srid,
    auth_srid,
    auth_name,
    wktext,
    cs_bounds,
    wktext3d
)
VALUES
( 
    'SIRGAS 2000 / UTM zone 22N',
    4674,
    4674,
    NULL,
    'PROJCS["SIRGAS 2000 / UTM zone 22N", GEOGCS [ "SIRGAS 2000", DATUM ["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000", SPHEROID ["GRS 1980", 6378137.0, 298.257222101]], PRIMEM [ "Greenwich", 0.000000 ], UNIT ["Decimal Degree", 0.01745329251994328]], PROJECTION ["UTM zone 22N (EPSG OP 16022)"], PARAMETER ["Latitude_Of_Origin", 0.0], PARAMETER ["Central_Meridian", -51.0], PARAMETER ["Scale_Factor", 0.9996], PARAMETER ["False_Easting", 500000.0], PARAMETER ["False_Northing", 10000000.0], UNIT ["Meter", 1.0]]',
    mdsys.sdo_geometry(NULL,NULL,mdsys.sdo_point_type(NULL,NULL,NULL),"MDSYS"."SDO_ELEM_INFO_ARRAY"(),"MDSYS"."SDO_ORDINATE_ARRAY"()),
    NULL
);
GRANT CREATE TABLE TO [SCHEMA];
GRANT CREATE SEQUENCE TO [SCHEMA];
INSERT INTO MDSYS.SDO_GEOM_METADATA_TABLE VALUES('[SCHEMA]','[TABELA]','[COLUNA]',MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('LONGITUDE',-180,180,100),MDSYS.SDO_DIM_ELEMENT('LATITUDE',-90,90,100)),4674);
 
CREATE INDEX [SCHEMA].IX_[TABELA] ON [SCHEMA].[TABELA] ([COLUNA]) INDEXTYPE IS MDSYS.SPATIAL_INDEX;

Referências:

  • http://blogdomariomartinez.blogspot.com.br/2014/05/oracle-spatial-projecoes-personalizadas.html
  • http://www.spatialreference.org/ref/sr-org/6687/
31 dez

Oracle – Criando um índice de unicidade condicional

Você já se deparou com alguma regra de negócio onde você precisa garantir unicidade somente para alguns tipos de registros dentro de uma tabela?

Um exemplo comum é garantir que a flag principal dentro de uma tabela de e-mail ou telefone seja única para cada pessoa e não na tabela como um todo

Um artifício interessante para criar um índice de unicidade condicional é utilizando o DECODE.

Veja uma exemplo abaixo:

CREATE UNIQUE INDEX MEU_SCHEMA.IX_TELEFONE_PRINCIPAL ON MEU_SCHEMA.TELEFONE
(
    DECODE("ST_PRINCIPAL",'S',TO_CHAR("ID_PESSOA"),'N',TO_CHAR("ID_PESSOA")||':'||TO_CHAR("ID_TELEFONE"),NULL) ASC
)
TABLESPACE  I_MEU_SCHEMA;
31 dez

Oracle – Consulta ao último registro de uma tabela histórico com “WITH”

Um artifício interessante para melhorar a performance de consultas históricos é a utilização do WITH.
Veja uma exemplo abaixo:

WITH 
    MEU_ALIAS_PARA_HISTORICO 
AS
(
    SELECT * FROM MEU_SCHEMA.MINHA_TABELA_HISTORICO
)
SELECT A.* 
FROM MEU_ALIAS_PARA_HISTORICO A,
(
    SELECT ID_TABELA_HISTORICO, MAX(DH_TABELA_HISTORICO) DH_TABELA_HISTORICO
    FROM MEU_ALIAS_PARA_HISTORICO
    GROUP BY ID_TABELA_HISTORICO
) B
WHERE A.ID_TABELA_HISTORICO = B.ID_TABELA_HISTORICO
AND A.DH_TABELA_HISTORICO = B.DH_TABELA_HISTORICO;
25 jun

Oracle 11g – Criando tabela a partir de um arquivo XML

Crie um diretório no oracle e coloque o arquivo xml desejado dentro dele.

Segue um exemplo:

CREATE TABLE T_ORGAO_SIORG
AS
SELECT
    CAST(TO_NUMBER(extractValue(value(x),'Dados_Cadastro/Codigo'))AS NUMBER(10) ) CD_ORGAO_SIORG,
    CAST(extractValue(value(x),'Dados_Cadastro/Nome') AS VARCHAR2(110)) NM_ORGAO_SIORG,
    CAST(extractValue(value(x),'Dados_Cadastro/Sigla') AS VARCHAR2(6)) SG_ORGAO_SIORG_,
    CAST(TO_NUMBER(extractValue(value(x),'Dados_Cadastro/Codigo_Pai'))AS NUMBER(10) ) CD_ORGAO_SIORG_PAI,
    CAST(extractValue(value(x),'Dados_Cadastro/Site') AS VARCHAR2(70)) ED_SITE
FROM 
TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(BFILENAME('MEU_DIRETORIO_ORACLE','Estrutura_Organizacional.xml'),nls_charset_id('WE8MSWIN1252')),'/Estrutura_Organizacional/Orgao/Dados_Cadastro'))) X;

Referências:

03 ago

Oracle Express – Acesso remoto

Para habilitar o acesso remoto do Oracle Express basta executar o comando EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
ou seja, entre no EXECUTAR LINHAS DE COMANDO SQL:
SQL>connect
Enter user-name: system
Enter password: ****
Connected.SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
PL/SQL procedure successfully completed.
SQL> quit;

Referências: