Как выбрать имя буфера из таблицы в sqlplus - PullRequest
2 голосов
/ 17 февраля 2011

как я могу выбрать имя моего файла спула из таблицы в sqlplus?

У меня есть что-то вроде:

SPOOL ON
SPOOL XXXXXXXXX.bkp
SELECT * FROM my_table WHERE field1='value';
SPOOL OFF

И хочу, чтобы XXXXXXXXX.bkp имел значениеполе из этой же таблицы.

С уважением, Фернандо

Ответы [ 2 ]

4 голосов
/ 17 февраля 2011

Вы можете использовать функцию SQLPLUS "new_value", чтобы сохранить значение столбца в переменную sqlplus, а затем спулировать его, как показано ниже.

SQL> create table spool_file (
  2       id number,
  3       file_name varchar2(200)
  4  );

Table created.

SQL> insert into spool_file values (1, 'test_spool_123.txt');

1 row created.

SQL> commit;

Commit complete.

SQL> column file_name new_value file_name;
SQL> select file_name from spool_file
  2    where id = 1;

FILE_NAME
--------------------------------------------------------------------------------
test_spool_123.txt

SQL> spool '&file_name';
SQL> select object_id from dba_objects
  2  where rownum < 10;

 OBJECT_ID
----------
        28
        49
        11
         6
         3
        52
        40
        19
        59

9 rows selected.

SQL> spool off;

А вот содержимое из моего файла спула.

SQL> select object_id from dba_objects
  2  where rownum < 10;

 OBJECT_ID                                                                      
----------                                                                      
        28                                                                      
        49                                                                      
        11                                                                      
         6                                                                      
         3                                                                      
        52                                                                      
        40                                                                      
        19                                                                      
        59                                                                      

9 rows selected.

SQL> spool off;

Возможно, вы захотите взглянуть на пакет UTL_FILE и его подпрограммы, если вам нужен больший контроль над записью в файлы.

2 голосов
/ 17 февраля 2011

Я не уверен на 100%, что вы пытаетесь сделать, но если вы хотите, чтобы переменное имя файла в вашем файле спула, вы могли бы сделать это:

col dat1 NEW_VALUE v_start_time

select to_char(sysdate,'YYYY-MM-DD_HH24MISS') dat1 from dual;

spool test_script_&v_start_time..txt

/*
other stuff...
*/
spool off

Это был пример, взятый изУ меня есть скрипт, который добавляет временную метку к имени файла, чтобы упростить управление несколькими выходными файлами.Обратите внимание на .. в команде spool [filename].

Поскольку вы говорите, что хотите указать фактическое имя поля в имени файла, вам придется изменить мой запрос на что-то, что запрашивает таблицу Oracle, в которой хранятся всеимена полей (я не могу вспомнить их имя сейчас), но это должно быть довольно просто.

...