有关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机的,经测试,未重现这个现象,原因不明
目录
相关文章
|
2月前
|
SQL 移动开发 Oracle
[Oracle]面试官:你说说rownum、currval与nextval分别是什么,还有没有其他的?
本文主要介绍了 Oracle 数据库中的 `rownum` 虚拟字段和 `nextval`、`currval` 伪列。`rownum` 用于生成结果集的序号,常用于 `top-n` 查询。`nextval` 和 `currval` 基于序列,分别表示序列的下一个值和当前值,常用于主键的自动填充。文中提供了详细的示例和注意事项,帮助读者更好地理解和使用这些功能。
58 1
[Oracle]面试官:你说说rownum、currval与nextval分别是什么,还有没有其他的?
|
3月前
|
SQL 关系型数据库 MySQL
SQL日期函数
SQL日期函数
|
5月前
|
SQL 数据采集 关系型数据库
在 Postgres 中使用 CTE
【8月更文挑战第11天】
97 0
在 Postgres 中使用 CTE
|
5月前
|
数据采集 SQL 关系型数据库
在 Postgres 中使用 Union
【8月更文挑战第11天】
64 0
在 Postgres 中使用 Union
|
8月前
|
SQL 关系型数据库 MySQL
MySQL中的时间函数Now和SYSDate有什么区别?
MySQL中的时间函数Now和SYSDate有什么区别?
121 1
|
Oracle 关系型数据库
Oracle的 nvl 函数及 nvl2 函数的应用
Oracle的 nvl 函数及 nvl2 函数的应用
370 0
|
SQL 关系型数据库
Postgre SQL date_trunc() 和timestamp
Postgre SQL date_trunc() 和timestamp
121 0
|
SQL 存储 运维
Oracle-12:伪列rowid和rownum
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       伪列:不真实存储在真表中,但是我们可以查询到不能对伪列进行增删改操作!   分页可以用rownum来分!!!!!!!(因为oracle中没有limit)   放一份数据库脚本,...
946 0
|
SQL Oracle 关系型数据库