У меня есть файл sql, который выполняется из командной строки, он отлично работает.
sqlplus username/password@DBInstance @filename.sql
Мой filename.sql выглядит примерно так:
set colsep ';'
set echo off
set feedback off
set sqlprompt ''
set trimspool on
set headsep off
set termout off
--set define off
set serveroutput on
set verify off
set autoprint off
set pagesize 0
set linesize 9999
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ', ';
spool STOCK.csv
SELECT ils.item
|| ';'
|| ';'
|| ';'
...
Where loc = store_no
--store_no is typed in the script by hand--
...;
spool off
exit
После выполнения команды sqlplus я получаю файл csv со всеми выбранными строками, которые разделены символом ';'для конкретного значения store_no все работает нормально.Что мне нужно, это отправить store_no в качестве параметра и для каждого параметра получить новый соответствующий * CSV-файл.Так что я могу запустить, например:
sqlplus username/password@DBInstance @filename.sql 3
И получить * CSV-файл, где store_no = 3. Я искал некоторые решения и не сделалполучить правильный.Я думаю, что я не далеко с этим решением:
set colsep ';'
set echo off
set feedback off
set sqlprompt ''
set trimspool on
set headsep off
set termout off
--set define off
set serveroutput on
set verify off
set autoprint off
set pagesize 0
set linesize 9999
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ', ';
spool STOCK.csv
DECLARE
store_no number := &1;
BEGIN
SELECT ils.item
|| ';'
|| ';'
|| ';'
...
Where loc = store_no
... ;
END;
/
spool off
exit
В качестве вывода я получаю это: PLS-00428: В этом операторе SELECT ожидается предложение INTO
Учитывая такой вывод, мне нужна переменная, чтобы хранить там весь вывод.Но я не знаю, как правильно читать * csv файл, используя DBMS_OUTPUT.PUT_LINE Кто-нибудь может помочь, как выполнить эту задачу?Заранее спасибо!