SQL para exportar tabela com campo DATE no Oracle

Trabalhar com datas em banco de dados é popularmente uma tarefa meio chatinho e cheia de poréns.

Portanto quero compartilhar um caso onde tive que exportar uma tabela de um banco de dados Oracle e importar em outro.
A situação foi especial porque a única ferramenta disponível era a linha de comando SQL e como havia campos DATE, o formato da saída para um SELECT não era o mesmo aceito na hora de inserir no outro banco de dados Oracle, gerando erro na operação. Eu também não podia usar o export porque no outro banco já haviam dados e não podia perde-los.

Após algumas pesquisas encontrei uma solução relativamente simples para o caso, vamos à ela:
Para entender melhor sugiro criar esta tabela abaixo:

CREATE TABLE usuario (
    "codigo" NUMBER NOT NULL ENABLE, 
    "nome" VARCHAR2(100 BYTE), 
    "ultimologin" DATE , 
    CONSTRAINT "pk_usuario" PRIMARY KEY ("codigo"));

Insira estes dois registros na tabela de exemplo:

INSERT INTO usuario ("codigo", "nome", "ultimologin") VALUES (1,'gabriel', TO_DATE('22/09/1829 07:21', 'DD/MM/RR HH24:mi'));
INSERT INTO usuario ("codigo", "nome", "ultimologin") VALUES (2,'tu', TO_DATE('21/07/1929 17:35', 'DD/MM/RR HH24:mi'));

Pronto, temos o ambiente para testar.

Agora vamos gerar um SQL Script de SELECT que irá gerar na saída um SQL Script de INSERT, note que isto não é segredo nenhum, a novidade é o uso do TO_CHAR para deixar a data no formato correto para inserção na outra tabela sem problemas. Veja como fica o Script para o exemplo dado:

SELECT 'INSERT INTO usuario ("codigo", "nome", "ultimologin") VALUES (' || 
       "codigo" || ',''' || 
       "nome"   || ''''  || 
       ',TO_DATE(''' || TO_CHAR("ultimologin",'DD/MM/YYYY HH24:MI') ||''', ''DD/MM/RR HH24:mi''));'
FROM usuario

A saída deste Script deve ser como esta a seguir, ou seja, um Script de INSERT prontinho para ser executado no outro Banco de Dados:

INSERT INTO usuario ("codigo", "nome", "ultimologin") VALUES (1,'gabriel',TO_DATE('22/09/1829 07:21', 'DD/MM/RR HH24:mi'));                                                                                                                                     
INSERT INTO usuario ("codigo", "nome", "ultimologin") VALUES (2,'tu',TO_DATE('21/07/1929 17:35', 'DD/MM/RR HH24:mi'));

É isso ai.

Deixe uma resposta