`
king520
  • 浏览: 167683 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
文章分类
社区版块
存档分类
最新评论

Oracle Dual表的使用

 
阅读更多

Oracle Dual表的使用

Dual在oracle中的使用非常频繁,看到别人使用,有点疑惑。为啥要偏偏使用这张表呢?
今天就这个疑问baidu了下。现在总结一下。

1.Dual是一张系统表(有人称其为:虚拟表),只有一个字段:DUMMY VARCHAR2(1)允许为空
2.因为在DBMS中查询语句需要:select from 表这种结构,所以当查询系统时间,虚拟字段,oracle函数调用时,
为了构造select from 这种结构,我们常常使用dual表,比如
No1:select sysdate from dual
No2:select fun_common_test(66) from dual
3. Dual只有一条数据。我在PL/SQL修改Dual表添加一条数据时,
系统会报"权限不足"的错误。所以可以给变量赋值的时候直接
4.用SELECT计算常量表达式、伪列等值时常用该表,因为它只返回一行数据,而使用其它表时可能返回多个数据行(貌似与第2条重复)
No1:select 3+4 from dual


dual表的一种巧妙使用:
情况:
在存储过程活着函数中给变量赋值,
如果查询无结果的话,
select into 语句会报错:
oracle01403:未找到数据错误。

select CBIC_SC_VALUE
into RED_FLAG
from cbizconfig
where CBIC_ORG_ID = 66
and CBIC_SC_CODE = 'QUERY_RED_WHEN_INVOICE';

查询无记录,赋值就会报错。
处理方法1:判断查询的记录,如果记录小于1时,不进行赋值的操作:
select count(*)
into ICOUNT
from cbizconfig
where CBIC_ORG_ID = 66
and CBIC_SC_CODE = 'QUERY_RED_WHEN_INVOICE';

if ICOUNT > 0 then
select CBIC_SC_VALUE
into RED_FLAG
from cbizconfig
where CBIC_ORG_ID = 66
and CBIC_SC_CODE = 'QUERY_RED_WHEN_INVOICE';
end if;

第2种办法:

Select
(select CBIC_SC_VALUE from cbizconfig
where CBIC_ORG_ID = 66
and CBIC_SC_CODE = 'QUERY_RED_WHEN_INVOICE') into RED_FLAG

from dual
这样巧妙的避开了无记录赋值的情况。
--这种写法还需要好好的领会。

分享到:
评论

相关推荐

    oracle之dual表的一些

    oracle之dual表的一些 oracle之dual表的一些 oracle之dual表的一些

    详解Oracle数据库中DUAL表的使用

    详解Oracle数据库中DUAL表的使用

    Oracle中的dual

    dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录

    oracle 不存在dual情况下注入.doc

    oracle 不存在dual情况下注入.doc

    10.Oracle虚表1

    1、dual虚表的结构2、查询dual虚表中的记录3、对dual虚表做增、删、改操作普通用户对dual虚表只有查询权限,没有增、删、改的权限 1、执行Oracl

    Oracle dual详解

    针对oracle中dual表的说明和一下实例。

    oracle_dual详解.doc

    oracle_dual详解 oracle_dual详解

    oracle_dual详解

    oracle数据库中的dual续表详细解读,适合数据库中级水平者学习。

    oracle数据库中有关dual的资料总结

    oracle、数据库、dual 有关oracle的一点小知识点

    21天学通Oracle

    第5章 Oracle数据表对象(教学视频:42分钟) 63 5.1 Oracle表空间 63 5.1.1 Oracle表空间简介 63 5.1.2 创建Oracle表空间 64 5.1.3 查看表空间 66 5.1.4 修改数据库默认表空间 67 5.1.5 修改表空间名称 68 ...

    BLOG_Oracle_lhr_DUAL系列

    BLOG_Oracle_lhr_DUAL系列BLOG_Oracle_lhr_DUAL系列BLOG_Oracle_lhr_DUAL系列BLOG_Oracle_lhr_DUAL系列

    数据库表dual

    dual表是oracle中的一部分,很有用的

    Oracle客户端连接Oracle服务器.docx

    dual是名义表,不存任何东西. Oracle客户端连接Oracle服务 全文共9页,当前为第4页。 Oracle客户端连接Oracle服务 全文共9页,当前为第4页。 Oracle远程连接数据库总结 Oracle代码 : orCL = (DESCRIPTION = ...

    Oracle数据库学习指南

    25. 安装Oracle后,经常使用的修改表空间的SQL代码 26. 比较SQL Server与Oracle、DB2 27. 多个数据库时,如何设置默认数据库 28. 各种数据类型的比较 29. 漫谈oracle中的空值 30. 没有备份、只有归档日志,如何...

    Oracle练习.txt

    2.怎么获取有哪些用户在使用数据库 select username from v$session; 3.如何在Oracle服务器上通过SQLPLUS查看本机IP地址 ? select sys_context('userenv','ip_address') from dual; 如果是登陆本机数据库,只能...

    oracle日期查询相关

    select sysdate from dual 等等一些关于oracle的查询当前时间,日期的一些sql语句的

    Oracle高级sql学习与练习

    1、集合操作 2、EXISTS和NOT EXISTS的使用 3、WITH字句 4、MERGE INFO 合并资料 5、层次查询...22、专题-NULL和DUAL详解 23、专题-时间、数字、字符格式详解 24、专题-ORACLE字符集问题 25、专题-随机值查询

    ORACLE应用中常见的傻瓜问题1000问-1

    <br> select sys_context( userenv , ip_address ) from dual; <br> 如果是登陆本机数据库,只能返回127.0.0.1,呵呵 <br> 20. unix 下怎幺调整数据库的时间? <br> su -root <br> date -u ...

    oracle中日期类型与unix 时间戳的转换

    oracle中日期类型与unix 时间戳的转换, Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型。...SELECT oracle_to_unix(SYSDATE),unix_to_oracle(1551774286),oracle_to_unix(SYSDATE) FROM dual;

Global site tag (gtag.js) - Google Analytics