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常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...
随机推荐
- Linux命令详解——vmstat
Vmstat命令详解 一.前言 vmstat命令: 用来获得有关进程.虚存.页面交换空间及 CPU活动的信息.这些信息反映了系统的负载情况 二.虚拟内存运行原理 在系统中运行的每个进程都需要使用到内 ...
- 05-【session、cookie】
session.cookie 1.HttpSession概述>HttpSession是由JavaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端!!!>Http ...
- JMeter 控件整理
一个线程组里多个请求的情况下,添加用户参数.如添加random函数,若不勾选“每次迭代更新一次”则每发送一个请求调用一次random函数,勾选上之后,整个线程组运行过程只调用一次random函数.
- java-接口—策略模式
策略模式,就是不同类继承相同的接口,实现不同的策略.
- python操作kafka实践
1.先看最简单的场景,生产者生产消息,消费者接收消息,下面是生产者的简单代码. ------------------------------------------------------------ ...
- 在xshell中安装python3.6
首先下载python安装包 wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz 然后解压 tar Jxvf Python- ...
- 帝都之行9day:正式上班第一天
今天是我正式上班的第一天. 面了两天,三家公司,然后周五就去办入职了,我是不是太随便了点,捂脸. 不管怎么说,又要开始上班啦,CRUD的日子又要开始了…… 加油吧!
- kylin实战(一)
kylin适用场景 OLAP 它适合数据量大,查询维度多,但是业务改动不频繁的场景.因为业务多,则kylin的cube很多.每次业务变更,kylin修改的工作量大,且每次全量跑数据耗费时间比较长. 它 ...
- 浅析Service Worker
一.service worker是什么? 平常浏览器窗口中跑的页面运行的是主JavaScript线程,DOM和window全局变量都是可以访问的. Service Worker是走的另外的线程,可以理 ...
- 1024·程序员节来啦!MyEclipse致敬改变世界的程序猿
1024·程序员狂欢季 MyEclipse/CodeMix — Java开发利器!现金红包免费领! 快拆开看你的最大优惠券是多少,幸运奖红包翻倍! (活动期间在线下单的客户才可享受此优惠,过期恢复 ...