Olá Pessoal,
Desculpe se enviar questionamentos "bobos", mas sou novo nesta parte de BD e SQL.
Estou precisando gerar um arquivo TXT com base no seguinte select, sendo que cada campo deve ser separado por ";" e sem espaço.
set echo off
set verify off
set feedback off
ttitle off
set heading off
spool c:\crm\estrutura.txt
select EST.EST_IN_CODIGO,
EST.FIL_IN_CODIGO,
EST.EST_ST_NOME,
EST.EST_ST_NOME_REAL,
EST.CUS_IN_REDUZIDO,
EST.CUSE_IN_REDUZIDO,
EST.PRO_IN_REDUZIDO,
EST.EST_DT_INICIOOBRA,
EST.EST_DT_FIMOBRA,
EST.EST_RE_AREATERRENO,
EST.ARQ_IN_CODIGO,
EST.CONST_IN_CODIGO
from MGDBM.DBM_ESTRUTURA EST
where EST.EST_CH_TIPOESTRUTURA = 'E' ;
spool off
exit;
Consegui gerar o arquivo, mas fica com varios espaços e sem o ;
Tem um outro detalhe, se o arquivo já tenha sido gerado no diretório, a próxima geração deve substituir o arquivo antigo, e isso não ocorre.
Desde já agradeço a ajuda.
Abs.
Geração para TXT sem espaço
Fala Everton, tudo bem e você?
O código que estou usando no PL/SQL é este:
set echo off
set verify off
set feedback off
ttitle off
set heading off
spool c:\crm\estrutura.txt
select EST.EST_IN_CODIGO,
EST.FIL_IN_CODIGO,
EST.EST_ST_NOME,
EST.EST_ST_NOME_REAL,
EST.CUS_IN_REDUZIDO,
EST.CUSE_IN_REDUZIDO,
EST.PRO_IN_REDUZIDO,
EST.EST_DT_INICIOOBRA,
EST.EST_DT_FIMOBRA,
EST.EST_RE_AREATERRENO,
EST.ARQ_IN_CODIGO,
EST.CONST_IN_CODIGO
from MGDBM.DBM_ESTRUTURA EST
where EST.EST_CH_TIPOESTRUTURA = 'E' ;
spool off
exit;
Ele gera o arquivo na minha maquina no diretório c:\crm\estrutura.txt, porém com espaço e sem o delimitador ;
Abs
O código que estou usando no PL/SQL é este:
set echo off
set verify off
set feedback off
ttitle off
set heading off
spool c:\crm\estrutura.txt
select EST.EST_IN_CODIGO,
EST.FIL_IN_CODIGO,
EST.EST_ST_NOME,
EST.EST_ST_NOME_REAL,
EST.CUS_IN_REDUZIDO,
EST.CUSE_IN_REDUZIDO,
EST.PRO_IN_REDUZIDO,
EST.EST_DT_INICIOOBRA,
EST.EST_DT_FIMOBRA,
EST.EST_RE_AREATERRENO,
EST.ARQ_IN_CODIGO,
EST.CONST_IN_CODIGO
from MGDBM.DBM_ESTRUTURA EST
where EST.EST_CH_TIPOESTRUTURA = 'E' ;
spool off
exit;
Ele gera o arquivo na minha maquina no diretório c:\crm\estrutura.txt, porém com espaço e sem o delimitador ;
Abs
-
- Rank: Estagiário Sênior
- Mensagens: 14
- Registrado em: Qua, 18 Jan 2012 2:43 pm
att,
Everthon Souza
Em Deus, posso todas as coisas!
Everthon Souza
Em Deus, posso todas as coisas!
Dê uma olhada nesse exemplo bem simples.. Já tentou a package UTL_FILE ? É bem interessante.
Você deve criar um diretório lógico no banco que fará o "apontamento" ao seu diretório físico:
-------------------------------------------------------------------------------------
-- criando um arquivo
-------------------------------------------------------------------------------------
set serveroutput on;
DECLARE
ARQ_SAIDA UTL_FILE.FILE_TYPE;
linha_arq number := 1;
CURSOR C_LINHA IS
select EST.EST_IN_CODIGO,
EST.FIL_IN_CODIGO,
EST.EST_ST_NOME,
EST.EST_ST_NOME_REAL,
EST.CUS_IN_REDUZIDO,
EST.CUSE_IN_REDUZIDO,
EST.PRO_IN_REDUZIDO,
EST.EST_DT_INICIOOBRA,
EST.EST_DT_FIMOBRA,
EST.EST_RE_AREATERRENO,
EST.ARQ_IN_CODIGO,
EST.CONST_IN_CODIGO
from MGDBM.DBM_ESTRUTURA EST
where EST.EST_CH_TIPOESTRUTURA = 'E' ;
BEGIN --caminho --nome arquivo -- W (write)
ARQ_SAIDA := UTL_FILE.FOPEN('DIR_TESTE','estrutura.txt'', 'W');
FOR C_LINHA_2 IN C_LINHA LOOP
UTL_FILE.PUT_LINE(ARQ_SAIDA, C_LINHA_2.SEQUENCE_NAME
||' '
|| C_LINHA_2.LAST_NUMBER
||' '
||LINHA_ARQ);
linha_arq := linha_arq+1;
END LOOP;
UTL_FILE.FCLOSE(ARQ_SAIDA);
DBMS_OUTPUT.PUT_LINE('Arquivo gerado com sucesso');
EXCEPTION
WHEN UTL_FILE.INVALID_OPERATION THEN
Dbms_Output.Put_Line('Opera�‹o inv‡lida no arquivo.');
UTL_File.Fclose(arq_saida);
WHEN UTL_FILE.WRITE_ERROR THEN
Dbms_Output.Put_Line('Erro de grava�‹o no arquivo.');
UTL_File.Fclose(arq_saida);
WHEN UTL_FILE.INVALID_PATH THEN
Dbms_Output.Put_Line('Diret—rio inv‡lido.');
UTL_File.Fclose(arq_saida);
WHEN UTL_FILE.INVALID_MODE THEN
Dbms_Output.Put_Line('Modo de acesso inv‡lido.');
UTL_File.Fclose(arq_saida);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Problemas na gera�‹o do arquivo. Entre em contato com o administrador do sistema.');
UTL_File.Fclose(arq_saida);
end;
-------------------------------------------------------------------------------------
-- lendo o arquivo criado
-------------------------------------------------------------------------------------
SET SERVEROUTPUT ON;
DECLARE
myfile UTL_File.File_Type;
conteudo varchar2(32000);
conteudo_aux varchar2(32000);
BEGIN
myfile := UTL_File.Fopen('DIR_TESTE','estrutura.txt', 'R', 32000);
Loop
begin
UTL_FILE.GET_LINE(MYFILE, CONTEUDO_AUX, 32000);
exception
when no_data_found then
exit;
END;
conteudo := conteudo||conteudo_aux||chr(10);
End Loop;
DBMS_OUTPUT.PUT_LINE(conteudo);
UTL_FILE.FCLOSE(MYFILE);
EXCEPTION
WHEN NO_DATA_FOUND THEN
Dbms_Output.Put_Line('Arquivo n‹o encontrado.');
UTL_File.Fclose(myfile);
WHEN UTL_FILE.INVALID_PATH THEN
Dbms_Output.Put_Line('Diret—rio inv‡lido.');
UTL_FILE.FCLOSE(MYFILE);
END;
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-- DIRETORIOS LOGICOS ORACLE
SELECT * FROM DBA_DIRECTORIES;
select * from all_directories;
-------------------------------------------------------------------------
-- Criando o diretorio logico no oracle
-------------------------------------------------------------------------
CREATE or replace DIRECTORY DIR_TESTE AS 'c:\crm';
-------------------------------------------------------------------------
-- liberando as permiss›es
-------------------------------------------------------------------------
GRANT READ, WRITE ON DIRECTORY DIR_TESTE TO SYS;
GRANT READ, WRITE ON DIRECTORY DIR_TESTE TO APPS;
-------------------------------------------------------------------------
-- Verificando as permiss›es
-------------------------------------------------------------------------
SELECT GRANTOR
, GRANTEE
, TABLE_SCHEMA
, TABLE_NAME,
privilege
FROM ALL_TAB_PRIVS
WHERE TABLE_NAME = 'DIR_TESTE';
Everton,
Parece bacana esta solução, mas tentei executar no PL/SQl e me retorna a mensagem ORA-00922: opção não encontrada ou invalida, sendo que a unica alteração que realizei no código que me passou foi no caminho e no nome do arquivo, segue o código. Você sabe o que pode ser? Realizei o teste salvando como um arquivo SQL e executando mas sem sucesso também.
Parece bacana esta solução, mas tentei executar no PL/SQl e me retorna a mensagem ORA-00922: opção não encontrada ou invalida, sendo que a unica alteração que realizei no código que me passou foi no caminho e no nome do arquivo, segue o código. Você sabe o que pode ser? Realizei o teste salvando como um arquivo SQL e executando mas sem sucesso também.
set serveroutput on;
DECLARE
ARQ_SAIDA UTL_FILE.FILE_TYPE;
linha_arq number := 1;
CURSOR C_LINHA IS
select EST.EST_IN_CODIGO,
EST.FIL_IN_CODIGO,
EST.EST_ST_NOME,
EST.EST_ST_NOME_REAL,
EST.CUS_IN_REDUZIDO,
EST.CUSE_IN_REDUZIDO,
EST.PRO_IN_REDUZIDO,
EST.EST_DT_INICIOOBRA,
EST.EST_DT_FIMOBRA,
EST.EST_RE_AREATERRENO,
EST.ARQ_IN_CODIGO,
EST.CONST_IN_CODIGO
from MGDBM.DBM_ESTRUTURA EST
where EST.EST_CH_TIPOESTRUTURA = 'E' ;
BEGIN --caminho --nome arquivo -- W (write)
ARQ_SAIDA := UTL_FILE.FOPEN('c:\crm','estrutura2.txt'', 'W');
FOR C_LINHA_2 IN C_LINHA LOOP
UTL_FILE.PUT_LINE(ARQ_SAIDA, C_LINHA_2.SEQUENCE_NAME
||' '
|| C_LINHA_2.LAST_NUMBER
||' '
||LINHA_ARQ);
linha_arq := linha_arq+1;
END LOOP;
UTL_FILE.FCLOSE(ARQ_SAIDA);
DBMS_OUTPUT.PUT_LINE('Arquivo gerado com sucesso');
EXCEPTION
WHEN UTL_FILE.INVALID_OPERATION THEN
Dbms_Output.Put_Line('Operacao invalida no arquivo.');
UTL_File.Fclose(arq_saida);
WHEN UTL_FILE.WRITE_ERROR THEN
Dbms_Output.Put_Line('Erro de gravacao no arquivo.');
UTL_File.Fclose(arq_saida);
WHEN UTL_FILE.INVALID_PATH THEN
Dbms_Output.Put_Line('Diretorio inv‡lido.');
UTL_File.Fclose(arq_saida);
WHEN UTL_FILE.INVALID_MODE THEN
Dbms_Output.Put_Line('Modo de acesso invalido.');
UTL_File.Fclose(arq_saida);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Problemas na gera?‹o do arquivo. Entre em contato com o administrador do sistema.');
UTL_File.Fclose(arq_saida);
end;
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes