слить файл на ftp сервер

nothx
Дата: 21.02.2007 15:17:16
Oracle 9.0.2, win 2000 prof
Как решить такую задачу:
Селектом вытащить инфу из базы, записать эту инфу в тектовый файл, и слить этот файл на ftp сервер (ftp://25.1.100.100/hello/). Нужен пример кода.
MacDuck
Дата: 21.02.2007 18:51:03
nothx
Oracle 9.0.2, win 2000 prof
Как решить такую задачу:
Селектом вытащить инфу из базы, записать эту инфу в тектовый файл, и слить этот файл на ftp сервер (ftp://25.1.100.100/hello/). Нужен пример кода.


Так а какие проблемы? Сделать cmd-шник, в нем 1. дергать скрипт, который супулил бы результаты запроса в файл, 2. влить стандартныйм ftp-клиентом туда, куда тебе надо.
Elic
Дата: 21.02.2007 19:34:53
nothx
Дата: 22.02.2007 07:40:21
Для чего это подключать?

CREATE OR REPLACE DIRECTORY my_docs AS '/u01/app/oracle/';
SET SERVEROUTPUT ON SIZE 1000000
@c:\ftp.pks
@c:\ftp.pkb

Что означает в этом коде p_to_dir => 'MY_DOCS', т.е я могу поставить типа C:\mydoc

-- Retrieve an ASCII file from a remote FTP server.
DECLARE
  l_conn  UTL_TCP.connection;
BEGIN
  l_conn := ftp.login('ftp.company.com', '21', 'ftpuser', 'ftppassword');
  ftp.ascii(p_conn => l_conn);
  ftp.get(p_conn      => l_conn,
          p_from_file => '/u01/app/oracle/test.txt',
          p_to_dir    => 'MY_DOCS',
          p_to_file   => 'test_get.txt');
  ftp.logout(l_conn);
  utl_tcp.close_all_connections;
END;
nothx
Дата: 22.02.2007 08:14:48
У меня клиент, я могу с помощью этой команды создать my_docs

CREATE OR REPLACE DIRECTORY my_docs AS '/u01/app/oracle/';
SET SERVEROUTPUT ON SIZE 1000000
nothx
Дата: 22.02.2007 08:49:32
Я не могу понять как мне узнать этот путь? '/u01/app/oracle/'
Elic
Дата: 22.02.2007 09:06:00
nothx
Я не могу понять как мне узнать этот путь? '/u01/app/oracle/'
Если не понимаешь, то используй (get|put)_remote_(ascii|binary)_data
Вряд ли тебе так уж нужны промежуточные файлы на Oracle-сервере.
nothx
Дата: 22.02.2007 13:30:00
Да это даже лучше. Вот эта процедура.
Как мне в p_data подставить данные, выбранные селектом?

--------------------------------------------------------------------------
PROCEDURE put_remote_ascii_data (p_conn  IN OUT NOCOPY  UTL_TCP.connection,
                                 p_file  IN             VARCHAR2,
                                 p_data  IN             CLOB) IS
-- --------------------------------------------------------------------------
  l_conn      UTL_TCP.connection;
  l_result    PLS_INTEGER;
  l_buffer    VARCHAR2(32767);
  l_amount    BINARY_INTEGER := 32767;
  l_pos       INTEGER := 1;
  l_clob_len  INTEGER;
BEGIN
  l_conn := get_passive(p_conn);
  send_command(p_conn, 'STOR ' || p_file, TRUE);
  
  l_clob_len := DBMS_LOB.getlength(p_data);

  WHILE l_pos < l_clob_len LOOP
    DBMS_LOB.READ (p_data, l_amount, l_pos, l_buffer);
    IF g_convert_crlf THEN
      l_buffer := REPLACE(l_buffer, CHR(13), NULL);
    END IF;
    l_result := UTL_TCP.write_text(l_conn, l_buffer, LENGTH(l_buffer));
    UTL_TCP.flush(l_conn);
    l_pos := l_pos + l_amount;
  END LOOP;
  UTL_TCP.close_connection(l_conn);
END;
-- --------------------------------------------------------------------------
Elic
Дата: 22.02.2007 13:35:31
nothx
Как мне в p_data подставить данные, выбранные селектом?
RTFM Application Developer's Guide - Large Objects (LOBs) (FAQ)