读书人

对两个ORACLE数据库操作解决思路

发布时间: 2012-02-05 12:07:14 作者: rapoo

对两个ORACLE数据库操作
首先声明:非同一服务器,切数据库不能做任何更改!
代码:

Delphi(Pascal) code
  DataSe := TADOQuery.Create(self);  DataSe.ConnectionString:='Provider=OraOLEDB.Oracle.1;Password=pass;Persist Security Info=True;User ID=db;Data Source=oracle1';  DataSe.SQL.Clear;  DataSe.SQL.Add('select count(t.id) as sj from table1 t where t.id in (select c.id from table2 c where c.typeid = ''9'') and t.time between to_date('''+DateTimeToStr(DateTimePicker1.DateTime)+''',''yyyy-mm-dd hh24:mi:ss'') and to_date('''+DateTimeToStr(DateTimePicker2.DateTime)+''',''yyyy-mm-dd hh24:mi:ss'') and t.memo like ''%深圳%''');  DataSe.Open;  Edit1.Text := DataSe.FieldByName('sj').AsString;  DataSe.Free;

上边代码在同一个数据库中不同表,可以正常统计数据.
问题:
现在在另一个数据库中统计数据,同样需要
Delphi(Pascal) code
t.id in (select c.id from table2 c where c.typeid = ''9'')
条件
另一个数据库配制驱动DataSe.ConnectionString:='Provider=OraOLEDB.Oracle.1;Password=word;Persist Security Info=True;User ID=db2;Data Source=oracle2';
怎么样才能像上边那样查询出统计数据呀??


[解决办法]
跨库查询统计可以在一条sql中实现,需要把另一个库的连接信息写到sql中,比如驱动,数据源,用户密码等,具体的格式是[这里就是连接信息].表名,搜一下看看具体的写法吧
[解决办法]
在oracle中,有database links,可以在一个数据库A中,建立到另外数据库B的链接,那么在A中可以用类似于
select f1, f2 from table1@B这样的方式来访问,跟同一数据库一样操作
[解决办法]
跨数据库可以直接在sql语句中写 sql server有opendatasource函数 oracle不知道有没有
[解决办法]
探讨
在oracle中,有database links,可以在一个数据库A中,建立到另外数据库B的链接,那么在A中可以用类似于
select f1, f2 from table1@B这样的方式来访问,跟同一数据库一样操作

[解决办法]
建立一个DBLink

-- Create database link
create database link DBLINK名称
connect to 用户名 identified by 密码
using '(description =
(address_list =
(address = (protocol=tcp)(host=192.168.1.33)(port=1521))
)
(connect_data =
(service_name=ora9i)
)
)';

这样访问时就可以
select * from c@dblink名称

如果嫌这样写麻烦,还可以针对"c@dblink名称"建立一个同义词或视图
[解决办法]
oracle跨数据库访问不修改数据库直接用SQL应该不能实现,除了db_link,其余两种方法参见:
http://www.ej38.com/showinfo/Oracle-155399.html

读书人网 >.NET

热点推荐