【SQL】DUAL

DUAL表是Oracle系统中对所有用户可用的一个实际存在的1行1列的表,这个表不能用来存储信息,在实际应用中仅用来执行SELECT语句。可以使用DUAL表来查询系统的信息。

--dual是1行1列的表

SQL> select * from dual;

 

D

-

X

--查询dual返回系统时间

SQL> select sysdate from dual;

 

SYSDATE

-------------------

2017-03-22 15:51:18

--查询当前用户

SQL> select user from dual;

 

USER

------------------------------

SCOTT

--输出计算结果

SQL> select 4*5 from dual;

 

       4*5

----------

        20

--输出函数结果

SQL> select ascii('A') from dual;

 

ASCII('A')

----------

        65

### Oracle 中 DUAL 表的用途及用法 DUAL 是 Oracle 数据库中的一个特殊虚拟表,主要用于满足 SQL 查询语法的要求。由于 SELECT 语句通常需要从某个表中查询数据,而某些情况下只需要执行计算或调用函数而不涉及实际的数据表,此时可以利用 DUAL 表来完成这些操作[^1]。 #### 特性 - **单行特性**:Oracle 系统确保 DUAL 表始终只包含一条记录[^3]。 - **结构简单**:该表仅有一个名为 `DUMMY` 的列,其数据类型为 `VARCHAR2(1)`,默认值为 `'X'`。 #### 常见用途 1. **执行表达式计算** 使用 DUAL 可以轻松实现数值运算或其他复杂表达式的求解。 ```sql SELECT SYSDATE + 7 FROM DUAL; ``` 2. **调用内置函数** 当需要通过 SQL 调用系统函数(如日期处理、字符串转换等),可以直接借助 DUAL 完成。 ```sql SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; -- 获取当前时间并格式化 ``` 3. **测试 PL/SQL 函数返回值** 如果希望快速验证自定义函数的行为,可以通过 DUAL 来获取结果。 ```sql CREATE OR REPLACE FUNCTION add_numbers(a NUMBER, b NUMBER) RETURN NUMBER IS BEGIN RETURN a + b; END; SELECT ADD_NUMBERS(5, 8) AS RESULT FROM DUAL; ``` 4. **生成序列号** 结合序列对象 (Sequence),能够方便地生成唯一编号。 ```sql SELECT MY_SEQUENCE.NEXTVAL FROM DUAL; ``` #### MySQL 对应功能 值得注意的是,在 MySQL 中并没有真正意义上的 DUAL 表概念;然而为了兼容部分移植需求,MySQL 提供了一个类似的机制允许直接书写 `SELECT` 不带 from 子句或者指定 `FROM DUAL` 形式[^2]。 --- ### 示例代码展示 以下是几个典型场景下的具体应用实例: ```sql -- 计算圆周率近似值 SELECT ROUND(22 / 7, 6) PI_APPROXIMATION FROM DUAL; -- 测试正则表达式匹配 SELECT REGEXP_REPLACE('abcABC123', '[a-z]', '*') MASKED_STRING FROM DUAL; -- 动态拼接字符串 WITH params AS ( SELECT 'John Doe' name, '+1-900-555-0100' phone_number FROM DUAL ) SELECT CONCAT(name, ' (' || phone_number || ')') CONTACT_INFO FROM params; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值