Oracle 变量 之 define variable declare 用法及区别
Oracle 变量 之 define variable declare 用法及区别
Table of Contents
1 扯蛋
Oracle 提供了几种不同的定义变量的方式: def(ine) ,var(iable), declare 分别适用于不同的环境.
- define
- sqlplus 环境(command窗口) 中用于定义变量, 适用于人机交互处理,或者sql脚本。
- variable
- plsql 匿名块中使用。非匿名块中不能使用。
- declare
- plsql 块中使用,适用于匿名块或者非匿名块。
2 define和accept
define 可以定义一个变量,在调用该变量时使用符号 & . 人机交互给变量赋值时使用acc(ecpt)命令。
作为查询值示例
define abc=1;
select * from dual where rownum=&abc;执行结果如下:
SQL> define abc=1;
SQL> select * from dual where rownum=&abc;
old 1: select * from dual where rownum=&abc
new 1: select * from dual where rownum=1 D
-
X- 作为变量传入匿名块示例
与declare配合使用
set serveroutput on
define abc=1;
declare abc varchar(2);
begin
select &abc into abc from dual;
dbms_output.put_line(abc);
end;
/执行结果如下:
SQL> set serveroutput on
SQL> define abc=1;
SQL> declare abc varchar(2);
2 begin
3 select &abc into abc from dual;
4 dbms_output.put_line(abc);
5 end;
6 /
old 3: select &abc into abc from dual;
new 3: select 1 into abc from dual;
1与variable 配合使用
set serveroutput on
define abc=1;
variable abc varchar2(10);
begin
:abc := &abc;
dbms_output.put_line(:abc);
end;
/执行结果如下:
SQL> set serveroutput on
SQL> define abc=1;
SQL> variable abc varchar2(10);
SQL> begin
2 :abc := &abc;
3 dbms_output.put_line(:abc);
4 end;
5 /
old 2: :abc := &abc;
new 2: :abc := 1;
1 PL/SQL procedure successfully completed.
人机交互赋值示例 通过人机交互给变量赋值,需要使用acc(ept)
SQL> acc i number prompt "Please input a number:"
Please input a number:4
SQL> select &i from dual;
old 1: select &i from dual
new 1: select 4 from dual 4
----------
4
3 variable
3.1 variable 特点
通过variable 定义变量,变量作用域为当前sqlplus环境。需要通过 : 来标记为变量。比如:
variable a varchar2(10); -- 此时定义了变量,:a 代表了变量,而 a 并不是变量,只是字母 a
var current_scn number;
begin
select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :current_scn from dual;
dbms_output.put_line(' '||:current_scn);
end;
/
执行结果如下:
SQL> var current_scn number;
SQL> begin
2 select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :current_scn from dual;
3 dbms_output.put_line(' '||:current_scn);
4 end;
5 /
13934393999029 PL/SQL procedure successfully completed.
下面的示例表明variable定义的变量在当前sqlplus环境中都可用。
SQL> var a number;
SQL> begin
2 select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :a from dual;
3 end;
4 / PL/SQL procedure successfully completed. SQL> select :a from dual; :A
----------
1.3947E+13
3.2 variable 与define配合使用
col scn for 9999999999999999999999
var a number; -- 通过variable 定义变量
begin
-- 在匿名块中给 :a 变量赋值
select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :a from dual;
end;
/
define current_scn = :a
select ¤t_scn as scn from dual;
执行结果
SQL> col scn for 9999999999999999999999
SQL> var a number;
SQL> begin
2 select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :a from dual;
3 end;
4 / PL/SQL procedure successfully completed. SQL> define current_scn = :a
SQL> select ¤t_scn as scn from dual;
old 1: select ¤t_scn as scn from dual
new 1: select :a as scn from dual SCN
-----------------------
13946807321486
4 declare
declare 定义变量后,变量标识符在整个块结构内部都代表变量,在结构块外部不可用, 也就是说 declare的作用域只是结构体内部。这点与variable定义变量不同。变量的调用方式也不一样, declare定义的变量, 不需要添加任何额外的标记,而variable 定义的变量需要和冒号配合使用。
示例
set serveroutput on
declare current_scn number;
begin
-- 注意: into 后面的变量就是declare定义的变量
select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into current_scn from dual;
dbms_output.put_line(current_scn);
end;
/执行结果
SQL> set serveroutput on
SQL> declare current_scn number;
2 begin
3 -- 注意: into 后面的变量就是declare定义的变量
4 select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into current_scn from dual;
5 dbms_output.put_line(current_scn);
6 end;
7 /
13946807319270 PL/SQL procedure successfully completed.
Oracle 变量 之 define variable declare 用法及区别的更多相关文章
- ORACLE中声明变量:define variable declare
在sqlplus 环境中,声明变量的关键字:define variable declare 一.define关键字(host变量) host变量的作用是一个替换作用,是主机环境与oracle进行交互的 ...
- 分组函数group by和Oracle中分析函数partition by的用法以及区别
1.分组函数group by和Oracle中分析函数partition by的用法以及区别 2.开窗函数.
- shell变量/环境变量和set/env/export用法_转
转自:shell环境变量以及set,env,export的区别 一.shell环境变量的分类以及set env export的区别: set:显示(设置)shell变量,包括的私有变量以及用户变量.不 ...
- 变量隐藏Accidental Variable Shadowing
6.5 - Variable shadowing (name hiding) | Learn C++ https://www.learncpp.com/cpp-tutorial/variable-sh ...
- typedef和#define的用法与区别
typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程 ...
- #ifndef#define#endif的用法
在网上看到了感觉作者总结得很好,作者辛苦了! #ifndef#define#endif的用法 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都 ...
- Oracle数据库中序列(SEQUENCE)的用法详解
Oracle数据库中序列(SEQUENCE)的用法详解 在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...
- #ifndef#define#endif的用法(整理)
[转] #ifndef#define#endif的用法(整理) 原作者:icwk 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都in ...
- 【转】typedef和#define的用法与区别
typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...
随机推荐
- 分布式系统读写模型中的Quorum机制
分布式系统的设计中会涉及到许多的协议.机制用来解决可靠性问题.数据一致性问题等,Quorum 机制就是其中的一种.我们通过分布式系统中的读写模型来简单介绍它. 分布式系统中的读写模型 分布式系统是由多 ...
- 【转】container_of宏 分析
在学习Linux驱动的过程中,遇到一个宏叫做container_of.该宏定义在include/linux/kernel.h中,首先来贴出它的代码: /** * container_of - cast ...
- STM32 HSE模式配(旁路模式、非旁路模式)
1.外部晶体/陶瓷谐振器(HSE晶体)模式 这种模式用得比较常见,HSE晶体可以为系统提供较为精确的时钟源.在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定.在启动时,直到 ...
- goquery 解析不了noscript
今天在用goquery的时候 解析noscript标签的时候.发现一直获取不到里面的元素. google得到.需要去除noscript标签. s.Find("noscript"). ...
- 安装WIN10+Ubuntu18.04安装教程(实测有效)
转载原文链接:https://www.cnblogs.com/masbay/articles/10745170.html 安装过程中尤其注意分区时候的挂载点一定要选对!!!选择Ubuntu的EFI所在 ...
- Java WEB框架——SSM之Hello world
一.建立项目 先搭建一个webapp项目(要选creat from arctype) 起名 选择maven路径,settings.xml那里要选择override才可以在资源管理器中浏览.接下来直接N ...
- request_time和upstream_response_time详解
下图是request_time. 下图是upstream_response_time. 精准的描述就是:request_time是从接收到客户端的第一个字节开始,到把所有的响应数据都发送完为止.ups ...
- vue 创建项目 create和init
vue init是vue-cli2.x的初始化方式,可以使用github上面的一些模板来初始化项目,webpack是官方推荐的标准模板名. 示例:vue init webpack myproject ...
- Web.xml 定制URL
直接上xml里的代码: <!--声明有哪些Servlet--> <servlet> <servlet-name>Book</servlet-name> ...
- Web前端开发——HTML基本标签
标题h1-h6 只有h1到h6,没有h7. 一个页面建议只有一个h1 普通文字大小大约介于h3~h4 段落p 段内换行br 段内分组span 预留格式pre 水平线hr