Oracle跨数据库查询并插入
“思聪思若流波”通过精心收集,向本站投稿了8篇Oracle跨数据库查询并插入,下面是小编给大家带来的Oracle跨数据库查询并插入,以供大家参考,我们一起来看看吧!
篇1:Oracle跨数据库查询并插入
Oracle跨数据库查询并插入
工作中需要从一个数据库中的表GIS_WEICHAI_DATA_1S中的数据导入到另个一数据库的表GIS_WEICHAI_DATA_1S中,数据库服务器都是远程的
1.
为你需要操作的远程数据库服务器建立本地服务名:
在本地数据库安装文件中,找到$ORACLE_HOME/network/admin/tnsnames.ora文件,
末尾添加
--第一个远程服务器的服务名:MYORACLE1
MYORACLE1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 221.131.228.256)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
--第一个远程服务器的服务名:MYORACLE2
MYORACLE2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.161.192.46)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
--如果有更多的远程数据库需要同时操作,可以依次增加!
--如果本机用的Windows操作系统,可以使用Oracle自带的Net Manager 工具,以图形化的操作方式来建立服务名!
2.
在本机上使用sysdba的角色登录本地数据库,创建database link:
执行如下sql语句:
--远程服务器一的对应database link
create public database link MYDBLINK1 --可以随便取名,当然,不能是关键字或保留字
connect to dbUserName1 identified by dbpwd1
using ' MYORACLE1';
--远程服务器二的对应database link
create public database link MYDBLINK2 --可以随便取名,当然,不能是关键字或保留字
connect to dbUserName2 identified by dbpwd2
using ' MYORACLE2';
--其中using后面填对应的数据库服务名,dbUserName1,dbpwd1填对应的数据服务器登录名,密码
--删除database link
Drop database link MYDBLINK1; --本例中是MYDBLINK1和MYDBLINK2
3.
操作远程服务器上的表,在要在对应的表后面加上@ linkName(对应的数据库链接名),就跟操作本地数据库中的表差不多,可以从不同数据库服务器中提取数据!很方便!
insert into GIS_WEICHAI_DATA_1S@MYDBLINK1 select * from GIS_WEICHAI_DATA_1S@ MYDBLINK2 where rownum<=10000;
4.
如果需要频繁的使用远程服务器中的表,上面的写法有点烦人,这时候可以考虑为这个表创建一个同义词
create synonym syName for GIS_WEICHAI_DATA_1S@MYDBLINK1;
以后在要使用GIS_WEICHAI_DATA_1S@MYDBLINK1的时候用syName就可以了!
删除同义词的语法为:
drop synonym syName;
5.
查看当前数据库的DB Link;
select * from user_db_links; --用户 DB Link
select * from dba_db_links; --dba DB Link
select * from v$dblink; --当前DB Link
篇2:Oracle跨服务器查询插入数据
想实现insert into 当前库表 select 远程库中的表数据这种方式的数据同步,于是配置了一下oracle服务,远程和本地服务都是oracle
一、在当前库中插入数据
create public database link remotedb connect to username identified by password using 'db';
create public database link curdb connect to username identified by password using 'curdb';
其中db,curdb是配置的别名【注意,这个需要配置在服务器端的tnsnames.ora中,如果是配置在客户端的tnsnames.ora中,则会报TNS:无法解析指定的连接标示符】
二、接下来就可以直接写语句了
insert into tb@curdb(field)
select field from tb@remotedb where rownum<=3
这个配置关键是tnsnames.ora需要配置在服务器端,不要在客户端
篇3:有关Oracle 数据库连接查询SQL语句
内连接(inner join)。
外连接:
全连接(full join)、左连接(left join)、右连接(right join)。
交叉联接(cross join)。
外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)或者两个连接表(全外连接)中的所有不符合条件的数据行。
1.左连接 (left [outer] join)
左外连接就是将左表的所有数据分别于右表的每条数据进行连接组合,返回的结果除内连接的数据外,还有左表中不符合条件的数据,并在右表的相应列中填上null值。
SQL语句如下:
select * from mt_pb_org o left join mt_pb_orgframe f on o.PB_ORGFRAMEID = f.PB_ORGFRAMEID;
等价语句:
select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid = f.pb_orgframeid(+);
2.右连接 (right [outer] join)
右外连接就是将右表中的所有数据分别与左表的每条数据进行连接组合,返回的结果除了内连接的数据外,还有右表中不符合条件的数据,并在左表相应的列中填上null值。
SQL语句如下:
select * from mt_pb_org o right join mt_pb_orgframe on o.pb_orgframeid = f.pb_orgframeid;
等价语句:
select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid(+) = f.pb_orgframeid;
3.全外连接 (full [outer] join)
全外连接就是将左表的所有数据分别与右表的每条数据进行连接组合,返回的结果除了内连接的数据外,还有两个表中不符合条件的数据,并在左表或者右表的相应列中填上null值。
SQL语句如下:
select * from mt_pb_org o full join mt_pb_orgframe o.pb_orgframeid = f.pb_orgframeid;
4.交叉连接(cross join)
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
SQL语句如下:
select * from mt_pb_org o cross join mt_pb_orgframe f;
篇4:如何提高ORACLE数据库的查询统计速度
大型数据库系统中往往要用到查询统计,但是对于数据量大的系统,用户在进行复杂的查询统计时往往感到速度很慢,不能满足应用要求,这就要求我们在设计数据库系统时进行合理设置,提高查询统计的速度,本文结合笔者的项目开发经验,阐述具体的设置方法。
我们在开发大型oracle数据库系统时结合项目的特点,本着安全、高效的原则对数据库进行了一些物理设计,从而大大提高了数据库的查询统计速度。
总结 1)扩大数据表空间到500M,用于存放本系统的数据;2)段盘区的初始大小为10K,增长大小为10K,增长幅度为1;
3)用户临时空间增大40M;
4)系统临时表空间和回滚段表空间增大40M,并且新建4个回滚段;
5)需要经常联结查询,而且数据量又大的库存表、名录表、收发料表放在一簇内;
6)提供定时备份,备份文件放在另外的机器上,
设置数据表空间的SQL语句如下:
CREATE TABLESPACE WXGL_DATA1 DATAFILE 'WXGL_DATA1.ORA' SIZE 500M ONLINE;
增加系统临时表空间和回滚段表空间的SQL语句如下:
ALTER TABLESPACE TEMPORARY_DATA ADD DATAFILE 'TMP2ORCL.ORA' SIZE 40M;
ALTER TABLESPACE ROLLBACK_DATA ADD DATAFILE 'RBS2ORCL.ORA' SIZE 40M;
将数据空间设置在指定的数据文件的SQL语句如下:
CREATE USER ZBGL IDENTIFIED BY ZBGL;
GRANT DBA TO ZBGL;
ALTER USER ZBGL DEFAULT TABLESPACE WXGL_DATA1 TEMPORARY TABLESPACE TEMPORARY_DATA;
篇5:Mysql和Oracle数据库中的分页查询
方法一:mysql数据库分页
<%
//定义每一页显示的记录
int pageSize = 3;
String strPageNo = request.getParameter(“pageNo”);
//记录当前页面
int pageNo;
//如果传入的当前页码为空,停留在第一页
if(strPageNo == null || strPageNo.equals(“”))
{
pageNo = 1;
}
else
{
try
//把传进来的字符串转化成数字
{
pageNo = Integer.parseInt(strPageNo.trim);
}
catch(NumberFormatException e)
{
pageNo = 1;
}
//如果页码小于或者等于0停留在第一页
if(pageNo<=0)
{
pageNo=1;
}
}
//连接数据库
Class.forName(“com.mysql.jdbc.Driver”);
Connection conn = DriverManager.getConnection
(“jdbc:mysql://localhost/bbs?user=root&password=mingming”);
Statement stCount = conn.createStatement();
ResultSet rsCount = stCount.executeQuery
(“select count(*) from article where pid=0”);//查询共有多少个根节点
rsCount.next();
int totalRecord = rsCount.getInt(1); //拿到所有的子节点,计算出总共有多少条记录
// 第一种方法 计算得到总的页数,如果能被整数,页数就是商,否则就是商+1
int totalPage =
totalRecord%pageSize==0 ? totalRecord/pageSize : totalRecord/pageSize +1;
//第二种方法 计算得到总的页数,在 总记录上+加一个pageSize然后减去1除页面的大小pageSize,取商
int totalRecords = rsCount.getInt(1);
totalPages = (totalRecords + PAGE_SIZE - 1)/PAGE_SIZE;
//如果当前页码大于总的页数,停在最后一页
if(pageNo>totalPage)
{
pageNo = totalPage;
}
//计算每一次分页时 的起始位置,注意起始是从0开始;
int startPos = (pageNo-1)*pageSize;
Statement st = conn.createStatement();
//进行分页查询,startPos是每一次分页的起始位置; pageSize是这一页要显示记录的大小
ResultSet rs = st.executeQuery
(“select * from article where pid =0 order by pdate desc limit ”+startPos+“,”+pageSize);
%>
分页后在页面的不同的显示方式:
方式一:在一个table中正常的显示:
<%
while(rs.next()){
%>
<%= rs.getString(“title”) %>//只显示每一个记录的title
<%
}
//关闭流
rs.close();
st.close();
conn.close();
%>
首页<%=1 %> 共<%=totalPage %>页 第<%=pageNo %>页 末页<%=totalPage %>
“>上一页
”>下一页
方式二:可以选择的显示:可以实现页面的跳转
<%
for(int i = 1;i<=totalPage;i++){
%>
<%=i %><%= pageNo==i?“selected”:“”%>>第<%=i %>页
<%
}
%>
方式三:可以直接进行页面的查找:
//提交到当前页面
<%=pageNo%>/>
方法二:Oracle数据库下的分页操作
分页查询
姓名
薪水
<%
//连接数据库,加载驱动
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connection ct = DriverManager.getConnection
(“jdbc:oracle:thin:@127.0.0.1:1521:ORCL”,“scott”,“tiger”);
Statement sm = ct.createStatement();
//总共有多少页
int pageCount = 0;
//总共有多少行记录
int rowCount = 0;
//每页有3行记录
int pageSize = 3;
//接收pageNow
String s_pageNow = (String)request.getParameter(“pageNow”);
//当前在第一页
int pageNow = 1;
if(s_pageNow != null)
{
//把s_pageNow转化为数值型
pageNow = Integer.parseInt(s_pageNow);
}
//查询表中共有多少条记录www.dnzg.cn
ResultSet rs = sm.executeQuery(“select count(*) from emp”);
if(rs.next())
{
rowCount = rs.getInt(1);
//如果整除就是商,否则就是商加上1 可以用三元表达式代替 rowCount%pageSize==0 ? rowCount/pageSize : rowCount/pageSize +1
if(rowCount%pageSize == 0)
{
pageCount = rowCount/pageSize;
}
else
{
pageCount = rowCount/pageSize +1;
}
}
//执行分页查询
rs = sm.executeQuery
(“select * from (select a1.*,rownum rn from(select * from emp) a1 where rownum<=”+pageNow*pageSize+“)where rn>=”+((pageNow-1)*pageSize+1)+“ ”);
while(rs.next())
{
out.println(“”);
out.println(“”+rs.getString(2)+“”);
out.println(“”+rs.getString(6)+“”);
out.println(“”);
}
//输出每一页要查找的连接
for(int i=1; i<=pageCount; i++)
{
out.print(“[”+i+“]”);
}
%>
篇6:提高ORACLE数据库的查询统计速度数据库教程
1. 设置五个回滚段的SQL语句如下:
SELECT SEGMENT_NAME FROM DBA_ROLLBACK_SEGS WHERE INITIAL_EXTENT < 51 AND
UPPPER(OWNER) = 'PUBLIC';
SELECT UPPER(STATUS) FROM DBA_ROLLBACK_SEGS WHERE UPPER(SEGMENT_NAME) = ''
ALTER ROLLBACK SEGMENT RB1 OFFLINE;
ALTER ROLLBACK SEGMENT RB2 OFFLINE;
ALTER ROLLBACK SEGMENT RB3 OFFLINE;
ALTER ROLLBACK SEGMENT RB4 OFFLINE;
ALTER ROLLBACK SEGMENT RB5 OFFLINE;
DROP ROLLBACK SEGMENT RB1;
DROP ROLLBACK SEGMENT RB2;
DROP ROLLBACK SEGMENT RB3;
DROP ROLLBACK SEGMENT RB4;
DROP ROLLBACK SEGMENT RB5;
CREATE PUBLIC ROLLBACK SEGMENT RB1 TABLESPACE ROLLBACK_DATA
STORAGE (INITIAL 512000 NEXT 512000 MAXEXTENTS 121);
CREATE PUBLIC ROLLBACK SEGMENT RB2 TABLESPACE ROLLBACK_DATA
STORAGE (INITIAL 512000 NEXT 512000 MAXEXTENTS 121);
CREATE PUBLIC ROLLBACK SEGMENT RB3 TABLESPACE ROLLBACK_DATA
STORAGE (INITIAL 512000 NEXT 512000 MAXEXTENTS 121);
CREATE PUBLIC ROLLBACK SEGMENT RB4 TABLESPACE ROLLBACK_DATA
STORAGE (INITIAL 512000 NEXT 512000 MAXEXTENTS 121);
CREATE PUBLIC ROLLBACK SEGMENT RB5 TABLESPACE ROLLBACK_DATA
STORAGE (INITIAL 512000 NEXT 512000 MAXEXTENTS 121);
ALTER ROLLBACK SEGMENT RB1 ONLINE;
ALTER ROLLBACK SEGMENT RB2 ONLINE;
ALTER ROLLBACK SEGMENT RB3 ONLINE;
ALTER ROLLBACK SEGMENT RB4 ONLINE;
ALTER ROLLBACK SEGMENT RB5 ONLINE;
COMMIT;
2.将数据量大的库存表等放在一簇内的SQL语句如下:
KCB='CREATE TABLE QC_KCB( '
+' CKNM NUMBER(8) ,'
+' QCNM NUMBER(10) ,'
+' CKKC NUMBER(12,2),'
+' SNCKKC NUMBER(12,2),'
+' LDJ NUMBER(12,2),'
+' BZ VARCHAR(100),'
+' PRIMARY KEY(CKNM,QCNM))'
+' TABLESPACE WXGL_DATA1 ' ;(大数据量的库存表等放在WXGL_DATA1)
QCFL = 'CREATE TABLE QC_QCFL '
+ '(FLBH NUMBER(2) PRIMARY KEY,'
+ ' FLMC VARCHAR(20) '
+ ' ) '
+' TABLESPACE WXGL_DATA2 ' ;(其他表放在WXGL_DATA2)
篇7:从一条select语句看Oracle数据库查询工作原理
假如,我们现在利用Select语句从数据库查询数据,Oracle数据库是如何运作的呢?从中我们可以领悟到什么呢?下面,就结合一条简单的select语句,看看Oracle数据库后台的运作机制,这对于我们之后的系统管理与故障排除非常有帮助。
第一步:客户端把语句发给服务器端执行。
当我们在客户端执行select语句时,客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句。也就是说,Oracle客户端是不会做任何的操作,他的主要任务就是把客户端产生的一些SQL语句发送给服务器端。虽然在客户端也有一个数据库进程,但是,这个进程的作用跟服务器上的进程作用事不相同的。服务器上的数据库进程才会对SQL语句进行相关的处理。不过,有个问题需要说明,就是客户端的进程跟服务器的进程是一一对应的。也就是说,在客户端连接上服务器后,在客户端与服务器端都会形成一个进程,客户端上的我们叫做客户端进程;而服务器上的我们叫做服务器进程。所以,由于所有的SQL语句都是服务器进程执行的,所以,有些人把服务器进程形象地比喻成客户端进程的“影子”。
第二步:语句解析。
当客户端把SQL语句传送到服务器后,服务器进程会对该语句进行解析。同理,这个解析的工作,也是在服务器端所进行的。虽然这只是一个解析的动作,但是,其会做很多“小动作”。
1、查询高速缓存。服务器进程在接到客户端传送过来的SQL语句时,不会直接去数据库查询。而是会先在数据库的高速缓存中去查找,是否存在相同语句的执行计划。如果在数据高速缓存中,刚好有其他人使用这个查询语句的话,则服务器进程就会直接执行这个SQL语句,省去后续的工作。所以,采用高速数据缓存的话,可以提高SQL语句的查询效率。一方面是从内存中读取数据要比从硬盘中的数据文件中读取数据效率要高,另一方面,也是因为这个语句解析的原因。
不过这里要注意一点,这个数据缓存跟有些客户端软件的数据缓存是两码事。有些客户端软件为了提高查询效率,会在应用软件的客户端设置数据缓存。由于这些数据缓存的存在,可以提高客户端应用软件的查询效率。但是,若其他人在服务器进行了相关的修改,由于应用软件数据缓存的存在,导致修改的数据不能及时反映到客户端上。从这也可以看出,应用软件的数据缓存跟数据库服务器的高速数据缓存不是一码事。
2、语句合法性检查。
当在高速缓存中找不到对应的SQL语句时,则数据库服务器进程就会开始检查这条语句的合法性。这里主要是对SQL语句的语法进行检查,看看其是否合乎语法规则。如果服务器进程认为这条SQL语句不符合语法规则的时候,就会把这个错误信息,反馈给客户端。在这个语法检查的过程中,不会对SQL语句中所包含的表名、列名等等进行SQL他只是语法上的检查。
3、语言含义检查。
若SQL语句符合语法上的定义的话,则服务器进程接下去会对语句中的字段、表等内容进行检查。看看这些字段、表是否在数据库中。如果表名与列名不准确的话,则数据库会就会反馈错误信息给客户端。
所以,有时候我们写select语句的时候,若语法与表名或者列名同时写错的话,则系统是先提示说语法错误,等到语法完全正确后,再提示说列名或表名错误。若能够掌握这个顺序的话,则在应用程序排错的时候,可以节省时间。
4、获得对象解析锁。
当语法、语义都正确后,系统就会对我们需要查询的对象加锁。这主要是为了保障数据的一致性,防止我们在查询的过程中,其他用户对这个对象的结构发生改变,
对于加锁的原理与方法,我在其他文章中已经有专门叙述,在这里就略过不谈了。
5、数据访问权限的核对。
当语法、语义通过检查之后,客户端还不一定能够取得数据。服务器进程还会检查,你所连接的用户是否有这个数据访问的权限。若你连接上服务器的用户不具有数据访问权限的话,则客户端就不能够取得这些数据。故,有时候我们查询数据的时候,辛辛苦苦地把SQL语句写好、编译通过,但是,最后系统返回个“没有权限访问数据”的错误信息,让我们气半死。这在前端应用软件开发调试的过程中,可能会碰到。所以,要注意这个问题,数据库服务器进程先检查语法与语义,然后才会检查访问权限。
6、确定最佳执行计划。
当语句与语法都没有问题,权限也匹配的话,服务器进程还是不会直接对数据库文件进行查询。服务器进程会根据一定的规则,对这条语句进行优化。不过要注意,这个优化是有限的。一般在应用软件开发的过程中,需要对数据库的sql语言进行优化,这个优化的作用要大大地大于服务器进程的自我优化。所以,一般在应用软件开发的时候,数据库的优化是少不了的。
当服务器进程的优化器确定这条查询语句的最佳执行计划后,就会将这条SQL语句与执行计划保存到数据高速缓存。如此的话,等以后还有这个查询时,就会省略以上的语法、语义与权限检查的步骤,而直接执行SQL语句,提高SQL语句处理效率。
第三步:语句执行。
语句解析只是对SQL语句的语法进行解析,以确保服务器能够知道这条语句到底表达的是什么意思。等到语句解析完成之后,数据库服务器进程才会真正的执行这条SQL语句。
这个语句执行也分两种情况。一是若被选择行所在的数据块已经被读取到数据缓冲区的话,则服务器进程会直接把这个数据传递给客户端,而不是从数据库文件中去查询数据。若数据不在缓冲区中,则服务器进程将从数据库文件中查询相关数据,并把这些数据放入到数据缓冲区中。
这里仍然要注意一点,就是Oracle数据库中,定义了很多种类的高速缓存。像上面所说的SQL语句缓存与现在讲的数据缓存。我们在学习数据库的时候,需要对这些缓存有一个清晰的认识,并了解各个种类缓存的作用。这对于我们后续数据库维护与数据库优化是非常有用的。
第四步:提取数据。
当语句执行完成之后,查询到的数据还是在服务器进程中,还没有被传送到客户端的用户进程。所以,在服务器端的进程中,有一个专门负责数据提取的一段代码。他的作用就是把查询到的数据结果返回给用户端进程,从而完成整个查询动作。
从这整个查询处理过程中,我们在数据库开发或者应用软件开发过程中,需要注意以下几点:
一是要了解数据库缓存跟应用软件缓存是两码事情。数据库缓存只有在数据库服务器端才存在,在客户端是不存在的。只有如此,才能够保证数据库缓存中的内容跟数据库文件的内容一致。才能够根据相关的规则,防止数据脏读、错读的发生。而应用软件所涉及的数据缓存,由于跟数据库缓存不是一码事情,所以,应用软件的数据缓存虽然可以提高数据的查询效率,但是,却打破了数据一致性的要求,有时候会发生脏读、错读等情况的发生。所以,有时候,在应用软件上有专门一个功能,用来在必要的时候清除数据缓存。不过,这个数据缓存的清除,也只是清除本机上的数据缓存,或者说,只是清除这个应用程序的数据缓存,而不会清除数据库的数据缓存。
二是绝大部分SQL语句都是按照这个处理过程处理的。我们DBA或者基于Oracle数据库的开发人员了解这些语句的处理过程,对于我们进行涉及到SQL语句的开发与调试,是非常有帮助的。有时候,掌握这些处理原则,可以减少我们排错的时间。特别要注意,数据库是把数据查询权限的审查放在语法语义的后面进行检查的。所以,有时会若光用数据库的权限控制原则,可能还不能满足应用软件权限控制的需要。此时,就需要应用软件的前台设置,实现权限管理的要求。而且,有时应用数据库的权限管理,也有点显得繁琐,会增加服务器处理的工作量。因此,对于记录、字段等的查询权限控制,大部分程序涉及人员喜欢在应用程序中实现,而不是在数据库上实现。
篇8:DELPHI 调用 Oracle 存储过程并返回数据集的例子.数据库教程
oracle|存储过程|数据
环境: Win2000 + Oracle92一、先在 Oracle 建包
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
PROCEDURE get(i_test INTEGER,p_rc OUT myrctype);
END pkg_test;
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get(i_test INTEGER,p_rc OUT myrctype) IS
BEGIN
IF i_test = 0 THEN
OPEN p_rc FOR SELECT SYSDATE FROM dual;
ELSE
OPEN p_rc FOR SELECT * FROM tab;
END IF;
END get;
END pkg_test;
二、用 Delphi 调用
建一个窗体,拖动控件 AdoConnection1 , ADOStoredProc1 和 Button1.
procedure TForm1.Button1Click(Sender: TObject);
begin
try
with ADOConnection1 do
begin
ConnectionString:=
'Provider=OraOLEDB.Oracle.1;'
+ 'Password=密码;'
+ 'Persist Security Info=True;'
+ 'User ID=用户名;'
+ 'Data Source=数据库名;'
+ 'Extended Properties=“PLSQLRSet=1;”';
Open;
end;
except
showMessage('连接不成功');
exit;
end;
try
with ADOStoredProc1 do
begin
Connection := ADOConnection1;
Parameters.Clear;
ProcedureName:= 'pkg_test.get';
Parameters.CreateParameter('p1',ftInteger,pdInput,10,1);
Open;
end;
except
showMessage('无法执行过程.');
end;
end;
【Oracle跨数据库查询并插入】相关文章:
5.系统从oracle版本转化为sqlserver版本数据库教程
7.浅析Oracle和SqlServer存储过程的调试、出错处理数据库
10.《插入艺术字》教学设计






文档为doc格式