Den*_*hev 3 sql oracle sqlplus spool
我有一个从命令行执行的 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
Run Code Online (Sandbox Code Playgroud)
运行 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
Run Code Online (Sandbox Code Playgroud)
作为输出,我得到以下内容: PLS-00428:此 SELECT 语句中需要一个 INTO 子句
考虑到这样的输出,我需要变量来存储整个输出。但我不知道如何使用 DBMS_OUTPUT.PUT_LINE 保持正确读取 *csv 文件任何人都可以帮助如何执行此任务吗?提前致谢!
为此,您不需要 PL/SQL 块。
假设你有一张这样的表:
create table yourTable(loc number, item varchar2(10));
insert into yourTable values (1, 'one');
insert into yourTable values (2, 'two');
insert into yourTable values (3, 'three');
Run Code Online (Sandbox Code Playgroud)
使用如下脚本test.sql :
set colsep ';'
set echo off
set feedback off
set sqlprompt ''
set trimspool on
set headsep off
set termout off
set serveroutput on
set verify off
set autoprint off
set pagesize 0
set linesize 9999
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ', ';
spool d:\temp\STOCK.csv
SELECT item
|| ';'
|| ';'
|| ';'
from yourTable
Where loc = &1;
spool off
exit
Run Code Online (Sandbox Code Playgroud)
这个电话:
sqlplus usr/pwd@DB @test.sql 3
Run Code Online (Sandbox Code Playgroud)
你会得到一个像这样的文件:
three;;;
Run Code Online (Sandbox Code Playgroud)
如果你想根据参数值spool到不同的文件,你可以编辑spool命令,例如这个
spool d:\temp\STOCK_&1..csv
Run Code Online (Sandbox Code Playgroud)
如果您作为参数值传递,将给出文件STOCK_3.csv3
| 归档时间: |
|
| 查看次数: |
9564 次 |
| 最近记录: |