2014-12-24 29 views
0

我試圖運行下面的SQLPlus *命令集:SQL加 - SET命令不影響腳本正在運行

/usr/tmp/> sqlplus -s/@my_test_script param1 param2 <<-EOF 
SET ECHO OFF 
SET HEADING OFF 
SET VERIFY OFF 
SET TERMOUT OFF 
SET FEEDBACK OFF 
SET PAGES 0 
SET LINESIZE 400 
EXIT 
EOF 

命令集都應該抑制從劇本我是輸出運行 - 但它們沒有效果,因爲腳本本身可能對ECHO,HEADING等具有不同的「範圍」。 只有將所有SET命令移動到腳本文件本身後,輸出纔會被抑制。

由於這段代碼最終應該變成用於運行其他SQL腳本的通用腳本,因此將這些SET命令放在每個腳本中並不是一個好的解決方案。

有誰知道強制SET命令值超過在同一個SQLPlus *「會話」中運行的腳本的方法嗎?

+3

我認爲你正在重定向到sqlplus的'set'命令正在運行_after_腳本。 –

+1

您在這裏 - 第一行定義的文檔字符串是「-EOF」,但只用「EOF」關閉它(前面沒有短劃線)。在第一行的'E'之前刪除短劃線。永遠不要思索我剛纔讀到,短劃線忽略了here-doc行中的主要TAB。感謝您讓我今天學習一些東西!大聲笑 –

回答

1

如果我記得不錯,你可以使用@@命令從每個腳本調用這個初始化腳本。例如:

@@init.sql 

source

編輯

也,從Oracle documentation

SQL * Plus還支持用戶配置文件,網站資料後執行。這個文件通常被命名爲login.sql。 SQL * Plus搜索當前目錄中的用戶配置文件,然後搜索您使用SQLPATH環境變量指定的目錄。 SQL * Plus按照它們列出的順序搜索以冒號分隔的目錄列表。

您可以將任何SQL命令,PL/SQL塊或SQL * Plus命令添加到您的用戶配置文件中。當您啓動SQL * Plus時,它會自動搜索您的用戶配置文件並運行它包含的命令。

2

我同意香農。你可以嘗試下面的代碼(它改變了一點點的順序):

/usr/tmp/> sqlplus -s/<<-EOF 
SET ECHO OFF 
SET HEADING OFF 
SET VERIFY OFF 
SET TERMOUT OFF 
SET FEEDBACK OFF 
SET PAGES 0 
SET LINESIZE 400 
@my_test_script param1 param2 
EXIT 
EOF