AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 252321
Accepted
Darrell
Darrell
Asked: 2019-11-01 07:39:20 +0800 CST2019-11-01 07:39:20 +0800 CST 2019-11-01 07:39:20 +0800 CST

Exportar a saída da consulta SQL para um arquivo em um trabalho do agendador

  • 772

Eu preciso exportar dados para um arquivo csv em um trabalho do agendador. Aqui estão os comandos:

SPOOL "\\AServerName\Output\RMS_DataFileSizes.csv" REPLACE;
SELECT /*csv*/
  TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') AS "CurrentDTM",
  df.tablespace_name AS "Tablespace Name",
  SUBSTR(df.file_name,INSTR(df.file_name,'RMS_'),20) AS "File Name",
  Round(df.bytes/1073741824,2) AS "Size (GB)",
  decode(e.used_bytes,NULL,0,Round(e.used_bytes/1073741824,2)) AS "Used (GB)",
  decode(f.free_bytes,NULL,0,Round(f.free_bytes/1073741824,2)) AS "Free (GB)",
  decode(e.used_bytes,NULL,0,Round((e.used_bytes/df.bytes)*100,1)) AS "% Used"
FROM DBA_DATA_FILES DF,
     (SELECT file_id,sum(bytes) used_bytes FROM dba_extents GROUP by file_id) E,
     (SELECT sum(bytes) free_bytes,file_id FROM dba_free_space GROUP BY file_id) f
WHERE e.file_id (+) = df.file_id
  AND df.file_id  = f.file_id (+)
  AND df.tablespace_name = 'RMS_DATA'
ORDER BY df.tablespace_name,df.file_name;
SPOOL OFF;

Quando faço do "tipo de trabalho" um "Bloco PL/SQL", ele falha e recebo o seguinte erro:

"ORA-06550: line 1, column 764:
PLS-00103: Encountered the symbol "\\AServerName\Output\RMS_DataFileSizes.csv" when expecting one of the following:

   := . ( @ % ;
ORA-06550: line 17, column 7:
PLS-00103: Encountered the symbol "OFF" when expecting one of the following:

   := . ( @ % ;
The symbol ":=" was substituted for "OFF" to continue.

O que estou fazendo errado?

oracle oracle-12c
  • 2 2 respostas
  • 1950 Views

2 respostas

  • Voted
  1. Littlefoot
    2019-11-01T12:26:05+08:002019-11-01T12:26:05+08:00

    Que tal uma abordagem um pouco diferente?

    Coloque esse código em um arquivo .SQL, vamos chamá-lo p.sql:

    spool p.txt
    
    SELECT /*csv*/
      TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') AS "CurrentDTM",
      df.tablespace_name AS "Tablespace Name",
      SUBSTR(df.file_name,INSTR(df.file_name,'RMS_'),20) AS "File Name",
      Round(df.bytes/1073741824,2) AS "Size (GB)",
      decode(e.used_bytes,NULL,0,Round(e.used_bytes/1073741824,2)) AS "Used (GB)",
      decode(f.free_bytes,NULL,0,Round(f.free_bytes/1073741824,2)) AS "Free (GB)",
      decode(e.used_bytes,NULL,0,Round((e.used_bytes/df.bytes)*100,1)) AS "% Used"
    FROM DBA_DATA_FILES DF,
         (SELECT file_id,sum(bytes) used_bytes FROM dba_extents GROUP by file_id) E,
         (SELECT sum(bytes) free_bytes,file_id FROM dba_free_space GROUP BY file_id) f
    WHERE e.file_id (+) = df.file_id
      AND df.file_id  = f.file_id (+)
      AND df.tablespace_name = 'RMS_DATA'
    ORDER BY df.tablespace_name,df.file_name;
    
    spool off
    exit
    

    Estou no MS Windows, então - crie um arquivo .BAT; vamos chamá-lo p.bat:

    sqlplus sys/pwd as sysdba @p.sql
    

    Por fim, use o programa de agendamento do seu sistema operacional (Gerenciador de Tarefas no meu Windows) e agende p.batpara executar quantas vezes quiser, por exemplo

    • deixe rodar diariamente às 22:00
    • ação = Iniciar um programa (navegue até p.bat)
    • opcionalmente (sugiro que você o use), defina o diretório "Iniciar em"

    Deveria trabalhar; pelo menos, funciona para mim.

    • 0
  2. Best Answer
    Balazs Papp
    2019-11-02T04:09:45+08:002019-11-02T04:09:45+08:00

    Não é assim que você faz isso. Um PLSQL_BLOCKtipo de trabalho não aceita esses comandos. Use um SQL_SCRIPTtipo de trabalho. Exemplo:

    begin
      dbms_credential.create_credential(
        credential_name => 'oracle_user',
        username        => 'oracle',
        password        => 'Oracle123'
      );
    end;
    /
    
    begin
      dbms_scheduler.create_job(
        job_name        => 'my_script_job',
        job_type        => 'sql_script',
        job_action      => 'conn bp/bp
    set markup csv on
    spool "/home/oracle/output.txt"
    select tablespace_name, file_id, bytes/1024/1024 as size_mb from dba_data_files;
    spool off',
        credential_name => 'oracle_user',
        enabled         => true,
        auto_drop       => false
      );
    end;
    /
    
    $ cat /home/oracle/output.txt
    SQL> select tablespace_name, file_id, bytes/1024/1024 as size_mb from dba_data_files;
    
    "TABLESPACE_NAME","FILE_ID","SIZE_MB"
    "SYSTEM",1,700
    "SYSAUX",2,870
    "UNDOTBS1",3,295
    "USERS",4,112.5
    "TEST",5,100
    

    Tenha em mente, SET MARKUP CSV ONé um recurso 12.2. Não funcionará com 12.1. /*csv*/é um recurso do SQL Developer, que também não funcionará.

    • 0

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve