Exportar fàcilment dades d'Oracle a un fitxer pla

Una manera molt simple d'exportar dades d'una consulta, taula, etc. d'una base de dades oracle a un fitxer pla és utilitzar la comanda SPOOL de SQLPlus. D'aquesta manera no cal dependre d'eines visuals, que no sempre estan disponibles, o no sempre funcionen com volem. A més es poden utilitzar les funcions de format d'Oracle en la mateixa sentència SELECT perquè les dades es generin ja en el format que necessitem.

Si, per exemple, volem recuperar algunes dades de tots els registres d'una taula de clients ordenats per data d'alta, només cal obrir una sessió de SQLPlus i executar aquesta sèrie de comandes:

SQL> SET HEADING OFF
SQL> SET FEEDBACK OFF
SQL> SPOOL C:\datos_de_clientes.txt
SQL> SELECT 'Cliente ' || CLI_NOMBRE || ', ' || CLI_NIF || '. Fecha alta: ' || TO_CHAR(CLI_FECHAALTA,'YYYY-MM-DD')
FROM TABLA_CLIENTES
ORDER BY CLI_FECHAALTA DESC;
SQL> SPOOL OFF;
SQL> SET FEEDBACK ON
SQL> SET HEADING ON

Les primeres línies amaguen les capçaleres que contindrien el nom dels camps, i no ens interessen perquè nosaltres només volem les dades. Spool dirigeix la sortida de dades cap al fitxer 'datos_de_clientes.txt' de la unitat C de la nostra màquina local.

Aquesta tècnica també es pot emprar per tasques més sofisticats com la constucció dinàmica de scripts a partir de les metadades que tenim disponibles en la nostra BD.

 

Contingut relacionat

  • És bastant habitual si es treballa amb bases de dades que sovint s'hagi de realitzar alguna tasca de creació o alteració d'estructures, anàlisis, recompilació, etc. sobre objectes de la base de dades. Per això se sol crear un script amb nombroses sentències DDL, en les quals la majoria de les vegades l'únic que canvia és el nom de l'objecte a tractar.
    En aquests casos pot estalviar-nos molt treball la utilització del diccionari de la base de dades per construir aquestes sentències dinámicament.

    Posarem com a exemple la creació d'un nou camp per emmagatzemar la data de creació dels registres en totes les taules d'un esquema d'una base de dades ORACLE. Per això utilitzaríem la següent sentència:

     SELECT 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME || ' ADD FECHA_CREACION DATE DEFAULT SYSDATE;' FROM ALL_TABLES WHERE OWNER ='HR';

  • Oracle, després de la compra de l'empresa Sunopsis, ha llançat al mercat la nova eina Oracle Data Integrator, basada  en què comerciava aquesta companyia. Aquesta eina entra en el segment de les d'E-LT, o d'Extracció,  Càrrega i Transformació (una evolució del concepte d'ETL), i aporta més flexibilitat, més gran capacitat d'integració amb diferents fonts i destins de dades, i realitza els processos de transformació dintre dels mateixos servidors de bases de dades, d'aquí el canvi en l'ordre de les sigles E-LT, en realitzar-se així el procés de Transformació normalment després que el de  Càrrega. Es pot consultar més informació sobre  la mateixa en Lançamien d'Oracle Data Integrator.Amb aquesta notícia queda clar perquè Oracle Warehouse Builder es pot utilitzar lliurament des de fa ja un temps si s'ha adquirit la llicència d'algun servidor de base de dades Oracle.

  • La instrucció grant s'utilitza per concedir determinats permisos genèrics o bé permisos sobre objectes a usuaris de la base de dades.
    La sintaxi de la mateixa és la següent:

    GRANT [privilegios_de_sistema | roles]
    TO [usuarios | roles |PUBLIC] {WITH GRANT OPTION }


    per concedir permisos genèrics

    GRANT [ALL {PRIVILEGES} | SELECT | INSERT | UPDATE | DELETE] ON objeto
    TO [usuario | rol | PUBLIC] {WITH GRANT OPTION}


    per concedir permisos sobre objectes
    La sintaxi és molt senzilla, i els privilegis els pot concedir l'usuari propietari dels objectes, o un usuari amb privilegis de concessió de permisos sobre objectes que no són seus (DBA's).
    El que volia comentar és la utilització de l'opció WITH GRANT OPTION, que permet que l'usuari al que li han concedit permisos pugui al seu torn concedir a altres usuaris.
    Mostraré la utilitzeu d'aquesta opció amb un exemple:

  •  Per accedir des d'una base de dades Oracle a objectes d'una altra base de dades Oracle la manera més senzilla és utilitzar un DBLINK (que sigui la més senzilla no significa que sempre sigui la més aconsellable, l'abús dels DBLINKS pot generar molts problemes, tant de rendiment com de seguretat)

    Per a això és necessari, amb un usuari que posseeixi el privilegi CREATE DATABASE LINK, crear el DBLINK en la base de dades origen (A) mitjançant una senzilla sentència com la següent:

    • create database link LNK_DE_A_a_B connect to USUARI identified by CONTRASENYA USING  'B';

    'LNK_DE_A_a_B' és el nom del link, 'USUARI' i 'CONTRASENYA' són els identificadors de l'usuari que utilitzarà el  link per connectar-se, els permisos del qual heretaran tots els accessos a través del link, i B

    és el nom de la instància de la base de dades.

    A través del DBLINK es pot connectar amb els objectes de la base de dades remota amb els permisos que tingui l'usuari que s'ha proporcionat en la sentència de creació.

  • Data Profile viewer de SSISUna de les múltiples millores que aporta SQL Server 2008 a la part de ETL amb Integration Services és la seva capacitat per realitzar perfilat de dades amb la seva nova Data Profile Task.

    El data profiling és una de les primeres tasques que se solen tractar en processos Qualitat de Dades, i consisteix en realitzar una primera anàlisi sobre les dades d'origen, normalment sobre taules, amb l'objectiu de començar a conèixer la seva estructura, format i nivell de qualitat. Se hacen consultas a nivel de tabla, columna, relaciones entre columnas, e incluso relaciones entre tablas. Es fan consultes a nivell de taula, columna, relacions entre columnes, i fins i tot relacions entre taules.

    La Data Profile Task de SSIS funciona seleccionant una taula d'una base de dades SQLServer 2000 o superior (no serveixen altres bases de dades), les opcions de perfilat que es vulgui realitzar sobre les dades de la taula, i un fitxer XML d'emmagatzematge els resultats quan s'executi la mateixa...