Oracle数据库中的变量

来源:https://blog.csdn.net/wahaa591/article/details/46772769

1、define(即host变量)

define variable_name = value

显示指定的DEFINE变量值和类型

//使用define def_name命令显示指定DEFINE变量的值和类型(DEFINE变量类型都为char)
SQL> define num;
DEFINE num = "1" (CHAR)

2、Variable(即绑定变量)

绑定变量主要是在sql中使用,达到sql解析一次,执行多次,从而提高效率的目的。绑定变量和host变量一样,也有定义的,也有临时性的。(临时性的在动态sql或动态plsql中通过占位符和using使用),其他的如sql会自动使用绑定变量的情况,此处不专门讨论。定义的绑定变量也是在当前session中有效。 绑定变量以下特点:

绑定变量在sql和plsql中直接引用必须加前缀 :。如要引用绑定变量a,则是 :a;

在真正运行的PLSQL程序中,比如自动运行,有自己的一套机制;

初始化和应用绑定变量,初始化定义的绑定变量,可以使用过程和函数,其中过程可以内部给绑定变量赋值、也可以参数是绑定变量,参数模式为out返回。使用函数和过程差不多,还可以使用call

函数来赋值。

sqlplus中可以使用大于等于3个字符表示一个命令,这里我们用var,var命令是声明一个绑定变量,只能给予名称和类型,定义的时候不能赋值,赋值可以在plsql中或者采用函数赋值(而host变量定义的时候必须赋值)。

(1).语法:

var var_name type

(2).声明绑定变量

//使用var声明两number类型的变量num1、num2

SQL> var num1 number;

SQL> var num2 number;

(3).显示指定绑定变量

//var num1命令显示指定绑定变量名称、数据类型

SQL> var num1

variable num1

datatype NUMBER

SQL>

还有一类SQLPLUS中的变量叫substitution variables,直接翻译过来是替代变量。一个使用替代变量的例子(来源:https://docs.oracle.com/cd/F49540_01/DOC/server.815/a66736/ch33.htm):

SQL> CLEAR BUFFER
SQL> INPUT
1 SELECT &GROUP_COL,
2 MAX(&NUMBER_COL) MAXIMUM
3 FROM &TABLE
4 GROUP BY &GROUP_COL
5
SQL> SAVE STATS
Created file STATS

Now run the command file STATS and respond as shown below to the prompts for values:

SQL>  @STATS
Enter value for group_col: JOB
old 1: SELECT &GROUP_COL,
new 1: SELECT JOB,
Enter value for number_col: SAL
old 2: MAX(&NUMBER_COL) MAXIMUM
new 2: MAX(SAL) MAXIMUM
Enter value for table: EMP
old 3: FROM &TABLE
new 3: FROM EMP
Enter value for group_col: JOB
old 4: GROUP BY &GROUP_COL
new 4: GROUP BY JOB

这类我之前在笔记中也写过:https://www.cnblogs.com/jiading/p/11578484.html。但是这类还有更多的文章可做,这也是我看了Oracle的官方文档才知道的。

如果上面的例子中,我们不仅要求最大值,还要求最小值、平均值,那么SQL脚本写出来应该是这样的:

select &Group_col,
max(&number_col1)maximun,min(&number_col1)minimum,avg(&number_col1)average
from &table
group by &group_col

这里我试的时候给number_col改了个名,原因后面见。

那么实际输入的时候是:

Enter value for group_col: JOB
old 1: select &Group_col,
new 1: select JOB,
Enter value for number_col1: SAL
Enter value for number_col1: SAL
Enter value for number_col1: SAL
old 2: max(&number_col1)maximun,min(&number_col1)minimum,avg(&number_col1)average
new 2: max(SAL)maximun,min(SAL)minimum,avg(SAL)average
Enter value for table: EMP
old 3: from &table
new 3: from EMP
Enter value for group_col: JOB
old 4: group by &group_col
new 4: group by JOB

可以看到,number_col1输入了三次。

为了简化操作,SQLPLUS提供了另外一种方式,如果将声明中的&变成&&,它就变成了一个变量(鉴于官方文档也没有给它起名字,我这里也就不起了吧):

select &Group_col,
max(&&number_col1)maximun,min(&&number_col1)minimum,avg(&&number_col1)average
from &table
group by &group_col

之后输入变成了这样:

Enter value for group_col: JOB
old 1: select &Group_col,
new 1: select JOB,
Enter value for number_col1: SAL
old 2: max(&&number_col1)maximun,min(&&number_col1)minimum,avg(&&number_col1)average
new 2: max(SAL)maximun,min(SAL)minimum,avg(SAL)average
Enter value for table: EMP
old 3: from &table
new 3: from EMP
Enter value for group_col: JOB
old 4: group by &group_col
new 4: group by JOB

可以看到,number_col1只需要输入一次了。

这里声明的变量在当前回话一直有效,再次运行STATS就会发现,&&number_col1不需要输入,而是自动填充了。这就是为什么我上面举例子为什么要改名的原因。

消除这一个变量声明的方法也很简单,退出现在的SQLPLUS进程再进入就没有了。

Oracle数据库中的变量的更多相关文章

  1. 向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据

    向Oracle数据库中插入数据出错: 经过排查,因为Update数据时没有出错,所以OracleHelper没有问题: 看异常信息提示:无效的变量和数据,应该是SQL语句的问题,调试时所传的实例Use ...

  2. Oracle数据库中插入日期型数据(to_date的用法)(转载)

    往Oracle数据库中插入日期型数据(to_date的用法) INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-20 18:31:34' , 'YYY ...

  3. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  4. 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

    一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop i ...

  5. Oracle 数据库的绑定变量特性及应用

    Oracle 数据库的绑定变量特性及应用[-----]转载自https://www.cnblogs.com/rootq/(原地址) 关键词: 绑定变量(binding variable),共享池(sh ...

  6. oracle 数据库中,应用程序里的连接探測语句的正确使用

    oracle 数据库中,应用程序里的连接探測语句的正确使用 本文为原创文章.转载请注明出处:http://blog.csdn.net/msdnchina/article/details/3851376 ...

  7. 查看Oracle数据库中的执行计划

    1.set autotrace traceonly命令 2.explain plan for命令 1)explain plan for select * from dual; 2)select * f ...

  8. 将Oracle数据库中的数据写入Excel

    将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...

  9. --关于null在oracle数据库中是否参与计算,进行验证,

    --关于null在oracle数据库中是否参与计算,进行验证,with td as (select null id,1 name from dual ),td1 as ( select null id ...

随机推荐

  1. ssy-publish

    github地址: https://github.com/shangyueyue/ssy-publish 一.安装 npm install ssy-publish -D 二.在process.cwd( ...

  2. linux内核中的subsys_initcall是干什么的?

    注意:使用的内核源码版本为5.1.3 1. subsys_initcall长什么样子? 它其实是个宏定义,定义如下: #define subsys_initcall(fn)     __define_ ...

  3. linux下批量转换文件

    一.背景 今天遇到windows下文件放置到ubuntu下后,使用vi打开文件,发现每一行结尾总是显示出^M,因此以下是批量转换成linux下格式的方法 二.批量转换成unix下的格式 find .  ...

  4. nginx优化后的主配置文件

    user web web; #nginx的程序账户和程序组 worker_processes auto; #worker进程数 auto设为默认 error_log /app/logs/nginx/w ...

  5. nfs服务共享,解决文件没有权限访问问题

    最近在了解一些服务权限的设置,突然就被这个nfs服务的权限给绊住了.当你挂载上服务器上的共享目录 时,却无法访问里面的一些内容.内心满满的忧桑...经过努力奋斗几分钟终于搞明白了. 无法访问的原因:因 ...

  6. Rose的四种视图模型

    用例视图 用例视图中包括了系统中的所有参与者.用例和用例图,必要时还可以在用例视图中添加顺序图.活动图等 逻辑视图 逻辑系统关注系统是如何实现用例中所描述的功能的,主要是对系统功能性需求提供支持,即为 ...

  7. linux下编译安装ACE-6.4.2(adpative communication environment)

    1.环境 CentOS-6.5-x86_64-bin-DVD1.iso VMware_workstation_full_12.5.2 (2).exe ACE-6.4.2.tar.gz 下载链接:htt ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-8.用户模块开发之保存微信用户信息

    笔记 8.用户模块开发之保存微信用户信息     简介:开发User数据访问层,保存微信用户信息 问题:             微信回调 用户昵称乱码             解决:        ...

  9. 【Linux】部署NTP时间同步服务器

    1. 查看机器的Linux版本 查看集群内所有服务器的linux版本,确保相同,不要跨大版本. [root@bigdata111 ~]# cat /etc/redhat-release CentOS ...

  10. React Hook 学习

    1.官方文档 https://react.docschina.org/docs/hooks-intro.html 2.阮一峰 reactHook http://www.ruanyifeng.com/b ...