【问题标题】:Script in sqlplus that fails in executing several scriptssqlplus 中的脚本无法执行多个脚本
【发布时间】:2018-02-06 04:51:45
【问题描述】:

我正在编写一个脚本 (000-Install.sql) 来执行几个 sql 脚本 (001-sys.tab002-enca.tab 等),在 控制台中。

首先,我只添加了两个脚本:

-- 000-Install.sql
spool upgradeSP1Ora.log

start 001-sys.tab;
start 002-enca.tab;

commit;

这里包含脚本的内容:

-- 001-sys.tab
select * from empr;
/


-- start 002-enca.tab
select * from dte_enca_docu;
/

但由于某种原因,执行提示类似于:

CODI_EMPR NOMB_EMPR                                GIR
---------- ---------------------------------------- ---
DIRE_EMPR                                      CODI_COM CODI_CIU  RUTT_EMPR
-------------------------------------------------- -------- -------- -------
D CODI_RAMO    NFAN_EMPR                                CODI_PERS
- ------------ ---------------------------------------- ----------------
 EMPR_CODG EMPR_NOMB                                FONO_EMPR
---------- ---------------------------------------- --------------------
 RUTT_REPL D NOMB_REPL                       CAC MUT  POMU_EMPR  POCA_EMPR
---------- - ----------------------------------- --- --- ---------- -------
FECA_EMP FEMU_EMP CIN CUEN_EMPR    CAJ COLOR_EMPR      LOGO_EMPR
-------- -------- --- ------------ --- --------------- ---------------
CODI_EMEX                      CLAV_ENCR
------------------------------ ------------------------------
ASUN_FACT_EMPR
---------------------------------------------------------------------------
TEXT_FACT_EMPR
----------------------------------------------------------------------------
385

第二个脚本(start 002-enca.tab)永远不会执行。

问题是我的脚本文件的执行没有正确完成(至少看起来是这样),这会阻止我的第二个脚本运行。

注意:如果我按下 enter 数字 385 会加一,如果我按下 CTRL + c 执行被取消。

【问题讨论】:

    标签: sqlplus windows oracle sqlplus


    【解决方案1】:

    尝试以下脚本内容:

    • 000-Install.sql

      set termout off
      spool upgradeSP1Ora.log
      
      @ 001-sys.tab;
      @ 002-enca.tab;
      
      spool off
      commit;
      exit;
      
    • 001-sys.tab

      select * from empr;
      
    • 002-enca.tab

      select * from dte_enca_docu;
      

    执行 SQL*Plus 为:

    sqlplus -l -s user/pass@tnsname @ 000-Install
    

    【讨论】:

    • 谢谢@0xdb,你的回答让我走上了正轨,但实际的解决方案是在一些脚本之后添加/(不是每个脚本都需要一个)。这是帮助我了解/ 需求的解决方案:stackoverflow.com/a/10207695/6780663
    • @AlejandroMontilla 不客气。只有带有嵌入块的语句需要斜杠,因为分号结束了块而不是完整的语句。选择永远不需要它,因为分号结束并执行带下划线的语句。因此我删除了斜线。
    • 我明白了,谢谢你的澄清,你说得对,selects 不需要/,在我的情况下,只有带有CREATE PROCEDURE 的脚本才需要它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    相关资源
    最近更新 更多