有关SYSDATE与DBLINK的问题

简介: 问题:有A,B两数据库,连接到A机,对于SELECT SYSDATE FROM DUAL@TOB 来说,这个SYSDATE从A机取时间,还是B机取时间?测试证明是从A机,应该是ORACLE 分析发现这个SYSDATE函数在A机即存在,且与DUAL对象之间没有依赖关系,则在A机执行这个函数代码,为证明...
问题:有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机的,经测试,未重现这个现象,原因不明
目录
相关文章
|
4天前
|
SQL 存储 Oracle
Oracle中的Dual表:数据世界的“神奇小盒子”
【4月更文挑战第19天】Oracle的Dual表是一个虚拟表,仅含一行一列,常用于执行SQL函数、数据类型转换、测试语句和动态SQL。它是测试和便捷操作的工具,如获取当前日期(`SELECT SYSDATE FROM DUAL`)、数字转字符串(`SELECT TO_CHAR(12345) FROM DUAL`)。在存储过程、函数和触发器中也发挥重要作用,是数据库管理员的得力助手。
|
4月前
|
SQL 关系型数据库 MySQL
MySQL中的时间函数Now和SYSDate有什么区别?
MySQL中的时间函数Now和SYSDate有什么区别?
30 1
|
7月前
|
Oracle 关系型数据库
Oracle的 nvl 函数及 nvl2 函数的应用
Oracle的 nvl 函数及 nvl2 函数的应用
163 0
|
11月前
|
SQL 关系型数据库
Postgre SQL date_trunc() 和timestamp
Postgre SQL date_trunc() 和timestamp
80 0
|
SQL 存储 运维
Oracle-12:伪列rowid和rownum
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       伪列:不真实存储在真表中,但是我们可以查询到不能对伪列进行增删改操作!   分页可以用rownum来分!!!!!!!(因为oracle中没有limit)   放一份数据库脚本,...
911 0
|
Oracle MySQL 关系型数据库
Oracle-05:伪表dual
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     此乃这张表里的全部字段信息,此表无法做修改操作   为什么有伪表这个概念?????????? 因为sql92的一个标准,select 后面要加上from 表名 像一个比较简...
1378 0
|
SQL Oracle 关系型数据库
|
SQL 网络协议 关系型数据库
|
SQL Oracle 关系型数据库