zoukankan      html  css  js  c++  java
  • 有关SYSDATE与DBLINK的问题

    问题:有A,B两数据库,连接到A机,对于SELECT SYSDATE FROM DUAL@TOB 来说,这个SYSDATE从A机取时间,还是B机取时间?
    测试证明是从A机,应该是ORACLE 分析发现这个SYSDATE函数在A机即存在,且与DUAL对象之间没有依赖关系,则在A机执行这个函数代码,为证明ORACLE是这样做的,示例如下:在A机上建一个自定义函数:create or replace function f_test return number is

    begin

    return(1);
    end f_test;
    在B机上建同名函数,但返回值不同,如下:
    create or replace function f_test return number is
    begin
    return(2);
    end f_test;
    在A机上执行SQL:
    select f_test from dual@to201
    返回值为1,删除A机上的f_test函数后,执行SQL:
    Select f_test from dual@to201
    报无效标识符错,再执行SQL:
    select f_test@to201 from dual@to201

    select f_test@to201 from dual
    返回值为2,
    结论:说明ORACLE 确实是在验证SQL相关对象时,先优先在本机查找对象的,如果要指定使用目标对象,则需要用DBLINK标识符来声明。
    按以上结论,对sysdate使用DBLINK标识符:
    Select sysdate@to201 from dual@to201 ,
    报错:未找到预期FROM关键字,如下也不行:
    Select standard@to201.sysdate from dual@to201
    原因不明
    如果硬要使用B机的SYSDATE函数,则在B机用户下建一个视图:
    create view mydate as select sysdate mydate from dual
    然后在A机:
    select mydate from mydate@to201
    正常。
    BTW:
    有同事反映说有这样一种情况,在SQLPLUS 下手工:
    select sysdate from dual@tob
    返回的是A机(本机)的时间,但如果在触发器中执行这个SQL,,获得的时间却是B机的,经测试,未重现这个现象,原因不明
    人生有三宝:终身运动,终身学习,终身反醒.吸收新知,提高效率,懂得相处,成就自己,也成就他人,创造最高价值。
  • 相关阅读:
    在C#中使用COM+实现事务控制
    Log4Net使用指南
    配置应用程序块
    Remoting的一些文章索引,方便阅读
    面向对象设计原则回顾
    C#中Finalize方法的问题
    C# 中的类型转换
    DotText源码阅读(2)工程、数据库表结构
    什么是COM组件
    VC中的DoDataExchange函数解析
  • 原文地址:https://www.cnblogs.com/jimeper/p/1751192.html
Copyright © 2011-2022 走看看