FOR 循环中表中的 SQLPlus 动态假脱机文件名

问题描述 投票:0回答:1

我对 Oracle Develop PL/SQL 语言非常陌生(所以请原谅理解有限)。我正在尝试使用

spool
命令根据表行值动态创建文件名。

下面是

FruitCost
表。我想为每一行创建一个 CSV 文件。例如

  1. 10_apple.csv
  2. 11_orange.csv等
id 名字 最低价格 最高价格
10 苹果 2.5 4.5
11 橙色 1.0 2.5
12 香蕉 0.5 1.5

经过 Stackoverflow 的努力和大力帮助,我想出了下面的脚本,但它不起作用。我尝试使用替代变量并将绑定变量分配给替代变量。

begin
    for r in (select * from fruitCost)
    Loop
    var id number(6)
    var name varchar2(10)
    begin
        :id := r.id;
        :name := r.name;
    end;
    
    column test new_value s_id noprint 
    select :id test from dual;
    
    column test new_value s_name noprint 
    select :name test from dual;

    spool \&s_id || '_' || &name..csv
    
    /*  query */
    
    spool off;
    
    end loop;
end;

我在 Windows 10 上使用 SQL Developer v.22.2。请提供帮助。 谢谢你。

oracle sqlplus spool
1个回答
0
投票

您可以根据您的要求使用以下脚本,该脚本将创建标题,然后以 csv 格式假脱机列

    set pages 0
    set lines 500
    set trimspool on
    set feedback off
    set echo off

    spool E:\temp_script.sql

    prompt set pages 0
    prompt set lines 500
    prompt set trimspool on
    prompt set feedback off
    prompt set echo off
    set colsep ,
    select  distinct  'spool '||id||'_'||name||'.csv' || chr(10)
      || ' select ''id'',''name'',''minprice'',''maxprice'' from dual;'||chr(10)||' select * from fruitCost where id = '''
        || id ||''''|| ' and name='''||name ||''''||' order by id,name;' || chr(10)
    from fruitCOst;

    prompt spool off

    spool off

    @E:\temp_script.sql
© www.soinside.com 2019 - 2024. All rights reserved.