2016-12-30 37 views
1

你好,我想連接到以下DBS在循環並執行語句,每個:SQLPLUS連接到不同的DBS

conn support/[email protected] 
conn support/[email protected] 
conn support/[email protected] 

有沒有辦法在sqlplus做到這一點?

謝謝您提前給出答案!

+0

'連接到循環中的以下dbs' ..不清楚你爲什麼要連接它循環。您可以單獨連接它們,運行您的語句並退出連接 – XING

+0

'conn support/support @ sp0666to set lines 1500 pages 10000 set colsep';' 組SQLPROMPT '' 集上 組headsep標題關閉 組NEWPAGE無 柱TM NEW_VALUE file_time NOPRINT 選擇TO_CHAR(SYSDATE, 'DDMMYYYY_HH24.MI')從雙TM; C:\ Users \ NANCHEV \ Desktop \ parked.csv 從EMPLOYEE中選擇EMPLOYEE,AUTHORIZED,TIME,DAT,WORKSTATION,其中status = 25; 假脫機; exit'我想在每個連接上執行此操作並將數據保存在csv中。你能幫助一些代碼或教程嗎? – user3450687

+0

問題是他們是668,而不僅僅是這三個例子:( – user3450687

回答

3

創建一個腳本,( doWork.sql),它包含大部分你想要做的事情:

conn &1/&[email protected]&3 

select EMPLOYEE, AUTHORIZED, TIME, DAT, WORKSTATION 
    from EMPLOYEE 
where status = 25; 

在一個單獨的腳本中(goTo Work.sql):

set lines 1500 pages 10000 
set colsep ';' 
set sqlprompt '' 
set heading on 
set headsep off 
set newpage none column tm new_value file_time noprint 

select to_char(sysdate, 'DDMMYYYY_HH24.MI') tm from dual; 

accept user 
accept pass 

spool C:\Users\NANCHEV\Desktop\parked.csv 

@@doWork &user &pass sp0666to 
@@doWork &user &pass sp0667to 
@@doWork &user &pass sp0668to 

spool off; 
exit 

如果您需要單獨的文件,請將兩個假脫機命令移至doWork.sql文件。

0

是的,有可能你可以使用oracle DBLink連接到不同的dbs,就像你的例子。

2

假設您想爲每個數據庫運行同一組查詢,我會創建一個包含這些語句的腳本文件(例如main_statements.sql)。然而

connect &&user/&&[email protected] 
@@main_statements.sql 

connect &&user/&&[email protected] 
@@main_statements.sql 

connect &&user/&&[email protected] 
@@main_statements.sql 

... 

如果:

然後,如果數據庫列表是靜態的,我會在同一目錄下創建第二個腳本文件(如run_me.sql),與沿線的內容,數據庫是靜態的,但清單數據庫中包含的某個地方,然後我會寫一個腳本(如run_me.sql)生成一個腳本,喜歡的東西:

set echo off 
set feedback off 
set verify off 

spool databases_to_run_through.sql 

select 'connect '||username||'/'||password||'@'||database_name||chr(10)|| 
     '@@main_statements.sql' 
from list_of_databases_to_query; 

spool off; 

@@databases.run_through.sql 

NB未經測試。另外,我假設你的表格包含每個需要連接的數據庫的用戶名和密碼;如果情況並非如此,你必須弄清楚如何處理它們;也許它們都是一樣的(在這種情況下,你可以對它們進行硬編碼 - 或者更好的方法是,使用替換變量(例如&&username)以避免將它們存儲在普通文件中,然後必須在運行時輸入它們。

您還需要從同一個目錄下的腳本,否則你有沒有被在同一目錄下main_statements.sql相當於腳本創建生成的腳本結束。