关于跨库调用的一个小测试

问题:

有A、B、C三个库
B库上的对象PROCEDURE b_test跨库调用A库上的对象TABLE a_test;
然而C库上的对象PROCEDURE c_test又调用B库上的b_test?
这样会出现什么问题?
能不能这样用?
能这样用的话效率如何?
可能出现的问题?

 

A库上的表:
CREATE TABLE EDU.A_TEST
(
    ID NUMBER     NULL
)

B库上的对象:
CREATE OR REPLACE PROCEDURE EDU."B_TEST"(num in number,site in varchar2)
AS
V_ERR_CODE NUMBER;
V_ERR_TXT   VARCHAR2(400);
b_time TIMESTAMP(6);
e_time  TIMESTAMP(6);
BEGIN
  select sysdate into b_time from dual;
 
  FOR I IN 1..num LOOP
  INSERT INTO a_test@B_TO_A
  VALUES(i);
  END LOOP;
  commit;
 
  select sysdate into e_time from dual;
  commit;
 
  insert into proc_use_times
  values('B_TEST',site||num,b_time,e_time);
  commit;
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    V_ERR_CODE:=SQLCODE;
    V_ERR_TXT:=SQLERRM;
    INSERT INTO PROC_ERR_LOGS  VALUES(
            V_ERR_CODE,
            V_ERR_TXT,
            SYSDATE,
            'EXCEPTION'
         );
         COMMIT;
END ;

 

SQL> set timing on
SQL> begin
  2  B_TEST(100,'db_b');
  3  end;
  4  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.18 100

 

总结

已用时间:  00: 00: 00.18 100B
已用时间:  00: 00: 00.21 1000B
已用时间:  00: 00: 01.81 10000B
已用时间:  00: 00: 17.93 100000B
已用时间:  00: 03: 18.60 1000000B 

 

已用时间:  00: 00: 00.39 100C
已用时间:  00: 00: 00.21 1000C
已用时间:  00: 00: 02.07 10000C
已用时间:  00: 00: 19.48 100000C
已用时间:  00: 03: 13.82 1000000C


已用时间:  00: 00: 00.07 100B
已用时间:  00: 00: 00.21 1000B
已用时间:  00: 00: 01.76 10000B
已用时间:  00: 00: 19.84 100000B
已用时间:  00: 03: 13.15 1000000B


已用时间:  00: 00: 00.14 100C
已用时间:  00: 00: 00.25 1000C
已用时间:  00: 00: 01.95 10000C
已用时间:  00: 00: 18.82 100000C
已用时间:  00: 03: 11.25 1000000C

 

这个结果比较奇怪,不晓得是不是中间truncate表的缘故而影响了测试结果
①可能会存在一定的效率问题
②C库对象在execute时候容易出错,尤其是动了A库的表之后,因此最好不要这样用。

 

转载于:https://www.cnblogs.com/gracejiang/archive/2010/12/11/5890441.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值