[oracle]连接到两个不同的数据库和表导致使用 shell 脚本的比较

标签: shell Oracle
发布时间: 2014/3/9 6:48:44
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有将数据从一个数据库复制到另一项的任务。我没有权限创建 DB Link.So,我取得了这项任务在 shell 脚本中使用复制命令。但现在,我需要进行比较的数据库之间的记录计数。我用来手动执行此操作。但现在,我想要实现自动操作。

根据我所知,Sqlplus 可以让我一次连接到一个数据库。但我想要像

sqlplus -s un/pwd@sid <<EOF
 SELECT count(*) FROM table1 WHERE column1 = 'abc'  -- first database
 UNION ALL
 SELECT count(*) FROM table1 WHERE column1 = 'abc';  -- second database
exit
EOF

它是可能省略 sqlplus 字符串并将其添加在查询中吗?

谢谢你 Savitha

解决方法 1:

你可能想要使用 sqlplus 替换变量来存储查询结果: http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch5.htm#sthref1114

这些变量是全局的 SQL,* 加实例,所以他们保留它们的值后连接到另一个数据库。

示例:

SQL> variable var1 number
SQL> variable var2 number
SQL> conn a/b@ccc
Connected.
SQL> begin
  2  select 1111 into :var1 from dual;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> print var1

      VAR1
----------
      1111

SQL> conn a/b@ddd
Connected.
SQL> print var1

      VAR1
----------
      1111

SQL> begin
  2  select 2222 into :var2 from dual;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> print :var2

      VAR2
----------
      2222

SQL> 

我们也可以看到他们像这样:

SQL> print :var2 :var1

      VAR2
----------
      2222


      VAR1
----------
      1111

SQL> 

并在 PL/SQL 中使用它们:

SQL> set serveroutput on
SQL> declare
  2  v1 number := :var1;
  3  v2 number := :var2;
  4  begin
  5     dbms_output.put_line('The difference is: '||to_char((v2-v1)));
  6  end;
  7  /
The difference is: 1111

PL/SQL procedure successfully completed.

SQL>
官方微信
官方QQ群
31647020