SQLPLUS 连接到不同的数据库

SQLPLUS connection to different dbs

你好,我想循环连接到以下数据库并在每个数据库上执行语句:

conn support/support@sp0666to 
conn support/support@sp0667to 
conn support/support@sp0668to 

在 sqlplus 中有什么方法可以做到这一点吗?

提前感谢您的回答!

是的,这是可能的,您可以像您的示例一样使用 oracle DBLink 连接到不同的数据库。

假设您想要 运行 每个数据库的同一组查询,我将创建一个包含这些语句的脚本文件(例如 main_statements.sql)。

然后,如果数据库列表是静态的,我将在同一目录中创建第二个脚本文件(例如 run_me.sql),内容如下:

connect &&user/&&password@db1
@@main_statements.sql

connect &&user/&&password@db2
@@main_statements.sql

connect &&user/&&password@db3
@@main_statements.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

N.B。未经测试。此外,我假设您的 table 包含需要连接的每个数据库的用户名和密码;如果不是这种情况,您将必须弄清楚如何处理它们;也许它们都是一样的(在这种情况下,您可以对它们进行硬编码 - 或者更好的是,使用替换变量(例如 &&username)以避免将它们存储在普通文件中。然后您必须输入他们在 运行 时间。

您还需要 运行 同一目录中的脚本,否则最终可能会导致生成的脚本未在与 main_statements.sql 等效脚本相同的目录中创建。

创建一个脚本 (doWork.sql),其中包含您想要执行的大部分操作:

conn &1/&2@&3

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

在单独的脚本中 (goToWork.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 文件。