ORACLE中声明变量:define variable declare
在sqlplus 环境中,声明变量的关键字:define variable declare
一、define关键字(host变量)
host变量的作用是一个替换作用,是主机环境与oracle进行交互的变量,定义host变量时必须同时指定变量名和变量的值,定义变量不可以指定数据类型,define定义的变量默认其数据类型都是char。该变量只在当前session起作用
1、定义语法:
define var_name =value
2、define命令
>查看已定义的所有变量及其值:define
SQL> define
DEFINE _DATE = "10-3月 -00" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl" (CHAR)
DEFINE _USER = "user" (CHAR)
DEFINE _PRIVILEGE = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE = "1102000100" (CHAR)
>查看已定义的某一个变量
SQL> define num
DEFINE NUM = "3" (CHAR)
3、变量的引用
定义变量后,可在sql语句中直接使用,需要在变量前加“&”符号
4、关闭打开define变量定义。
SQL> set define on
SQL> define b=10
SQL> select * from user_tables where rownum=&b;
原值 1: select * from user_tables where rownum=&b
新值 1: select * from user_tables where rownum=10
SQL> set define off;
SQL> define a=10
SQL> select * from user_tables where rownum=&a;
SP2-0552: 未声明绑定变量 "A"。
5、临时变量
上述是显示的定义变量方式,另一种是隐式定义的临时变量,临时变量只是当前sql语句可用。
SQL> select * from user_tables where rownum=&var;
输入 var 的值: 10
原值 1: select * from user_tables where rownum=&var
新值 1: select * from user_tables where rownum=10
SQL> select * from user_tables where rownum=&var;
输入 var 的值:
二、variable关键字
variable定义的变量即绑定变量,一般用于存储过程有out类型的参数时。定义时需要定于变量的数据数据类型,支持的数据类型如下。同define一样,只在当前会话中有效。
SQL> help variable
VARIABLE
--------
Declares a bind variable that can be referenced in PL/SQL, or
lists the current display characteristics for a single variable
or all variables.
VAR[IABLE] [variable [type]]
where type represents one of the following:
NUMBER CHAR CHAR (n [CHAR|BYTE])
NCHAR NCHAR (n) VARCHAR2 (n [CHAR|BYTE])
NVARCHAR2 (n) CLOB NCLOB
REFCURSOR BINARY_FLOAT BINARY_DOUBLE
1、定于语法:
var[iable] var_name type;
简写var,(sqlplus支持不少于三个字符的表示命令)。var定于的变量,必须同时指定数据类型,定义时var变量不能赋值。
2、引用
引用var定义变量,需要在前面加“:”。
3、var命令,同define。
4、var变量的初始化。
使用存储过程初始化、函数初始化。
call命令调用函数把结果传给绑定变量,
函数初始化:call function(参数列表) into :绑定变量1
存储过程初始化:exec pro_name(var_name=>:绑定变量);
三、declare--声明部分
plsql程序块的声明部分,内部变量,只在当前程序块有效。常量、变量、游标的声明都在declare部分。
Oracle定义变量的方式有3种:
声明并使用变量;
使用%TYPE声明变量类型;
使用%ROWTYPE声明变量类型
可以通过sys登录,使用"v$reserved_words"数据字典查看全部关键字
声明并使用变量
变量声明基本规则:
PL/SQL是强类型语言,变量都必须在它声明之后才可以使用;
变量不区分大小写;
变量都要在DECLARE部分声明;
变量名称可以由字母,数字,_(下划线),$,#组成;
所有的变量名称要求以字母开头,不能是Oracle保留字(关键字);
可以通过sys登录,使用"v$reserved_words"数据字典查看全部关键字
变量的长度最多30个字符;
所有的变量均为局部作用域,它们只在给定的PL/SQL块中有效;
变量的默认值为NULL;
示例:
定义变量不设置默认值
DECLARE
v_result VARCHAR2(30) ; -- 此处没有赋值
BEGIN
DBMS_OUTPUT.put_line('v_result的内容〖' || v_result || '〗') ;
END ;
/
输出结果为空
变量声明语法:
变量名称 [constant] 类型 [not null] [:=value];
语句解析:
constant:定义常量,必须在声明时为其赋予默认值;
not null:表示此变量不允许为null;
:=value:在变量声明示,设置初始数据;
示例:定义变量
DECLARE
v_resultA NUMBER := 100 ; -- 定义一个变量同时赋值
v_resultB NUMBER ; -- 定义一个变量没有设置内容
BEGIN
v_resultb := 30 ; -- 没有区分大小写
DBMS_OUTPUT.put_line('计算的结果是:' || (v_resultA + v_resultB) ) ;
END ;
/
运行结果:130
分析:此程序采用了两种方式为声明的变量进行赋值:
1.在DECLARE中定义变量的时候直接赋值:v_resultA number := 100;
2.在DECLARE中定义变量,而后在BEGIN中为变量赋值:v_resultb:=30;
3.v_resultB在赋值时写成了v_resultb依然不影响执行结果;
定义非空变量:
DECLARE
v_resultA NUMBER NOT NULL := 100 ; -- 定义一个非空变量v_resultA,同时赋值
BEGIN
DBMS_OUTPUT.put_line('v_resultA变量内容:' || (v_resultA) ) ;
END ;
/
运行结果:v_resultA变量内容:100
定义常量:
DECLARE
v_resultA CONSTANT NUMBER NOT NULL := 100 ; -- 定义一个常量同时赋值
BEGIN
DBMS_OUTPUT.put_line('v_resultA常量内容:' || (v_resultA) ) ;
END ;
/
运行结果:v_resultA变量内容:100
1.使用constant定义的常量不能在程序中对其参数进行修改。此sql使用了NOT NULL进行定义,实际上是没有任何实际意义的。
使用%TYPE声明变量类型
该声明方式,可以使某一个变量与指定数据表中某一列的类型一样;
语法:
变量定义表名称.字段名称%TYPE
示例:使用"%TYPE"定义变量
DECLARE
v_eno emp.empno%TYPE ; -- 与empno类型相同
v_ename emp.ename%TYPE ; -- 与ename类型相同
BEGIN
DBMS_OUTPUT.put_line('请输入雇员编号:') ;
v_eno := &empno ; -- 由键盘输入雇员编号
SELECT ename INTO v_ename FROM emp WHERE empno= v_eno ;
DBMS_OUTPUT.put_line('编号为:' || v_eno || '雇员的名字为:'|| v_ename) ;
END ;
/
运行:输入empno的值:7369
输出结果:编号为:7369雇员的名字为:SMITH
分析:此程序主要演示了%TYPE变量的使用方式。定义的eno和ename两个变量的数据类型参考了emp表的empno和ename两个字段
使用%ROWTYPE声明变量类型
此标记可以定义表中一行记录的类型;
使用"select…..into…."将表中的一行记录设置到了ROWTYPE类型的变量中时,可以利用"rowtype变量.表字段"的方式取得表中每行的对应列数据
示例:使用ROWTYPE装载一行记录
DECLARE
v_deptRow dept%ROWTYPE ; -- 装载一行dept记录
BEGIN
SELECT * INTO v_deptRow FROM dept WHERE deptno=10 ;
DBMS_OUTPUT.put_line('部门编号:'|| v_deptRow.deptno || ',名称:' || v_deptRow.dname || ',位置:' || v_deptRow.loc) ;
END ;
/
运行结果:部门编号:10,名称:ACCOUNTING,位置:NEW YORK
分析:此sql定义了deptRow的ROWTYPE类型变量,之后使用限定查询,查询出10部门的完整信息,并将此行信息设置到deptRow变量中,然后分别利用列名称取得此行中的每列内容。
补充:通过定义专门的集合类型也可以完成与ROWTYPE类型的功能
通过自定义类型接收一行记录:
DECLARE
TYPE dept_type IS RECORD (
dno dept.deptno%TYPE ,
dna dept.dname%TYPE ,
dlo dept.loc%TYPE) ; -- 定义一个新的类型
v_deptRow dept_type ; -- 装载一行dept记录
BEGIN
SELECT * INTO v_deptRow FROM dept WHERE deptno=10 ;
DBMS_OUTPUT.put_line('部门编号:'|| v_deptRow.dno || ',名称:' || v_deptRow.dna || ',位置:' || v_deptRow.dlo) ;
END ;
/
查看Oracle数据库SQL执行历史
-- 找出哪个数据库用户用什么程序在最近三天执行过delete或truncate table的操作
SELECT c.username,
a.program,
b.sql_text,
b.command_type,
a.sample_time
FROM dba_hist_active_sess_history a
JOIN dba_hist_sqltext b
ON a.sql_id = b.sql_id
JOIN dba_users c
ON a.user_id = c.user_id
WHERE a.sample_time BETWEEN SYSDATE - 3 AND SYSDATE
AND b.command_type IN (7, 85)
ORDER BY a.sample_time DESC;
ORACLE中声明变量:define variable declare的更多相关文章
- Oracle 变量 之 define variable declare 用法及区别
Oracle 变量 之 define variable declare 用法及区别 Table of Contents 1. 扯蛋 2. define和accept 3. variable 3.1. ...
- 在switch中的case语句中声明变量会被提前
原文链接:http://my.oschina.net/u/2000201/blog/514384 本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一 ...
- 函数中声明变量不用Var的情况
我们都知道函数中声明变量不用Var时这个变量会成为全局变量,但是并不是函数一开始执行就会把它变为全局变量,必须执行到这条语句. 看一段代码 function f(){ alert(a); ...
- 在switch中的case语句中声明变量编译出错的解决方案
在switch中的case语句中声明变量编译的问题 先来看段代码,别管什么意思: : , j = ; ; i < ; i++) recive_phone[i] = msgbuf.text[i]; ...
- [转帖]【Oracle】详解Oracle中NLS_LANG变量的使用
[Oracle]详解Oracle中NLS_LANG变量的使用 https://www.cnblogs.com/HDK2016/p/6880560.html NLS_LANG=LANGUAGE_TERR ...
- 纯c中声明变量
count 声明位置错了,纯c中声明变量全部放在main函数里,最前面的位置,要么vc6.0会报错: 修改 #include <stdio.h> int main(void) { int ...
- bash中声明变量方法
bash提供了declare命令来声明变量,该命令的基本语法如下: declare attribute variable 其中,attribute表示变量的属性,常用的属性有如下所述. ...
- 【SQL】小心在循环中声明变量——浅析SQL变量作用域
本文适用:T-SQL(SQL Server) 先看这个语句: --跑3圈 BEGIN --每圈都定义一个表变量,并插入一行 DECLARE @t TABLE(Col INT PRIMARY KEY) ...
- for语句中声明变量
在C语言中,局部变量应该在函数的可执行语句之前定义,但在C++中变量可在任何语句位置定义,只要允许程序语句的地方,都允许定义变量. 在C99标准中C同C++一样允许在for循环语句中定义变量.并且这个 ...
随机推荐
- log4j托管tomcat日志
由于项目中 Tomcat 日志越来越大,对于日志查找非常不方便,所以经过一番调查可以通过log4j来托管 Tomcat 日志的方式,实现Tomcat日志切片.这里只说明怎么是log4j托管Tomcat ...
- Android面试题 描述一下android的系统架构
android系统架构从下往上为linux内核层.运行库.应用程序框架层和应用程序层. Linux Kernel:负责硬件的驱动程序.网络.电源.系统安全以及内存管理等功能. Libraries和an ...
- Nginx- web服务配置与测试
(一) 软件介绍由俄罗斯人lgor Sysove开发,为开源软件.支持高并发:支持几万并发连接(特别是静态小文件业务环境) 资源消耗少:在3万并发连接下开启10个Nginx线程消耗内存不到200M 支 ...
- visual studio调试exe程序
标题:How to debug and profile any EXE with Visual Studio 文章:https://devblogs.microsoft.com/visualstudi ...
- mniGraffle常用快捷键
OmniGraffle 是 Mac 上的绘图利器.Graffle 在很多方面对标 Windows 系统上的 Microsoft Visio,是制作各种文档的绝妙工具. 变换移动 放大:Cmd+Shif ...
- Windows下无法新建文件夹
原文链接:https://www.jianshu.com/p/ee3205d5b9c9
- FM系列
在计算广告中,CTR是非常重要的一环.对于特征组合来说,业界通用的做法主要有两大类:FM系列和Tree系列.这里我们来介绍一下FM系列. 在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征 ...
- linux网络编程之socket编程(六)
经过一个国庆长假,又有一段时间没有写博文了,今天继续对linux网络编程进行学习,如今的北京又全面进入雾霾天气了,让我突然想到了一句名句:“真爱生活,珍惜生命”,好了,言归正传. 回顾一下我们之间实现 ...
- nginx 环境 thinkphp 隐藏index.php
tp官网已经写了 http://doc.thinkphp.cn/manual/hidden_index.html 不生效 重启nginx .问题依旧 kill掉nginx进程 再启动 贴段自己的配置 ...
- sql server replace 的使用方法
Sql Server REPLACE函数的使用 REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法REPLACE ( ''string_replace1' ...