【问题标题】:how to redirect the execution of a sql script (without the spool command) to an output file using a ksh script如何使用 ksh 脚本将 sql 脚本(没有 spool 命令)的执行重定向到输出文件
【发布时间】:2019-04-12 01:57:45
【问题描述】:

我想从 KSH 脚本运行这个命令,它允许运行 sql 脚本(不使用假脱机)

sqlplus -s $CONNEXION_BDD @${FILE_SQL} >> $OUTPUT_FILE

但它不起作用,她开始没有任何结果。

【问题讨论】:

    标签: oracle sqlplus ksh


    【解决方案1】:

    我刚刚创建了一个名为 numbers 的表并运行了一些数据:

    create table numbers (num varchar(10));
    insert into numbers values ('one');
    insert into numbers values ('two');
    insert into numbers values ('three');
    insert into numbers values ('four');
    commit;
    

    并使用 sqlplus 选择数据:

    $ cat get_num.sql
    select * from numbers;
    quit;
    $ sqlplus -s $CONN_STR  @get_num.sql > get_num.out
    $ cat get_num.out
    
    NUM
    ----------
    one
    two
    three
    four
    

    这是另一个使用 here-doc 的版本:

    #!/bin/ksh
    sqlplus -s $CONN_STR  <<EOF > get_num.out
    select * from numbers;
    quit;
    EOF
    

    如果你想使用 PL/SQL:

    #!/bin/ksh
    sqlplus -s $CONN_STR <<EOF > tryCur.out
    set serveroutput on size 30000;
    DECLARE
       thisNum varchar2(10);
       CURSOR num_cur is
          SELECT num FROM numbers;
    BEGIN
       OPEN num_cur;
       LOOP
       FETCH num_cur into thisNum;
          EXIT WHEN num_cur%notfound;
          dbms_output.put_line('ThisNum is:'|| thisNum);
       END LOOP;
       CLOSE num_cur;
    END;
    /
    EOF
    

    这个版本产生了输出文件:

    ThisNum is:one
    ThisNum is:two
    ThisNum is:three
    ThisNum is:four
    
    PL/SQL procedure successfully completed.
    

    【讨论】:

    • 我想运行一个包含 SELECT 查询的 plsql 脚本并将结果重定向到一个输出文件而不使用 SPOOL
    • 你说的是PL/SQL?你没有忘记set serveroutput on size 30000;,是吗?如果您不包含它,您将看不到来自dbms_output.put_linespool 的任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多