Oracle 中的 & 符号详解
Oracle 中的 &
符号详解
在 Oracle 数据库中,&
是一个常用于 替代变量(substitution variable) 的符号,广泛应用于 SQL*Plus、SQL Developer、Toad 等客户端工具中。当需要在 SQL 脚本中进行用户输入或者实现动态 SQL 语句时,&
符号就非常有用了。
本文将详细介绍 &
符号的作用、用法、注意事项以及相关的设置控制。
一、&
符号的作用
&
用于提示用户输入变量值,并将其替换到 SQL 语句中执行。这种机制被称为 变量替换(substitution variable)。
例如:
SELECT * FROM emp WHERE deptno = &dept_id;
在执行时,客户端会提示你输入一个值,比如 10
,最终执行的 SQL 就是:
SELECT * FROM emp WHERE deptno = 10;
二、单个 &
与双 &&
的区别
1. 单个 &
单个 &
会在每次出现时都提示输入:
SELECT '&name' AS name1, '&name' AS name2 FROM dual;
运行时会提示两次输入 name
,例如你输入了 Tom
和 Jerry
,结果如下:
2. 双 &&
&&
仅在 SQL*Plus 和某些 命令行工具中生效。如果你在 PL/SQL 块、存储过程、普通 SQL 脚本 中写
&&
,它不会被 Oracle 解析为操作符,而会导致语法错误。
双 &&
会第一次提示输入,后续自动使用第一次的值:
SELECT '&&name' AS name1, '&&name' AS name2 FROM dual;
输入一次 Tom
后,后续所有 &&name
都会替换成 Tom
,结果如下:
三、定义替代变量
可以使用 DEFINE
来预先定义变量:
DEFINE dept_id = 20
SELECT * FROM emp WHERE deptno = &dept_id;
在这种情况下,不再提示输入,&dept_id
会被替换成 20
。
要查看定义的变量:
DEFINE
要删除某个变量:
UNDEFINE dept_id
四、设置提示符
使用 SET DEFINE
可以控制替代变量的行为。
关闭替代变量功能:
SET DEFINE OFF
关闭后,&
将被视为普通字符,不再提示输入。
更改提示符,例如改成
#
:
SET DEFINE #
这样写就不会提示输入:
SELECT * FROM emp WHERE deptno = #dept_id;
五、在 PL/SQL 中的注意事项
在 PL/SQL 块中使用 &
符号时,仍然会触发替换行为:
BEGIN
DBMS_OUTPUT.PUT_LINE('&msg');
END;
执行时会提示输入 msg
的值。这在调试过程中可以临时传参。
六、实际应用示例
示例:动态查询不同部门员工
ACCEPT dept_no PROMPT '请输入部门编号:'
SELECT empno, ename, sal
FROM emp
WHERE deptno = &dept_no;
运行时用户输入值后,将自动带入 SQL 执行。
七、总结
八、注意事项
&
符号是客户端行为,在 Oracle 服务器端 SQL 中并不存在。一些图形化工具(如 PL/SQL Developer)默认关闭变量替换功能,使用时需注意设置。
替代变量适合用于编写 可交互的 SQL 脚本,不适合在自动化脚本或存储过程内使用。
- 感谢你赐予我前进的力量