zoukankan      html  css  js  c++  java
  • 关于跨库调用的一个小测试

    问题:

    有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库的表之后,因此最好不要这样用。

  • 相关阅读:
    The Ubuntu version detected is too old (< 10.04). Please refer to VMware KB article 2147454 to learn how to obtain and install VMware Tools on this system
    Metasploit渗透测试指南:修订版 勘误
    栈溢出基础
    修改peda颜色
    linux 修改文件夹颜色 终端颜色
    fadetop bing wallpaper
    odoo 去除动作菜单的删除按钮
    crontab详解
    odoo 创建初始数据库 切换当前数据库
    24 单链表的遍历与优化
  • 原文地址:https://www.cnblogs.com/gracejiang/p/5890441.html
Copyright © 2011-2022 走看看