2016-12-30 36 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相当于脚本创建生成的脚本结束。