先记载刚困扰我的一个问题,最近学习plsql,由于所用学习书籍后面提供题目常用到define变量,但由于这一变量的使用特殊性,自己便寻思这一变量所书类别,Oracle提供的变量分类共有四类:
1)标量(scalar)类型
2)复合(composite)类型
3)参照(reference)类型
4)LOB(large object)类型
这四类中并没有与只匹配的分类,在网络上查找才发现它属于第五类(另类:))——非plsql类变量。
define变量:主要应用于SQL*pls以及类似于sql*plus的开发工具中,主要用于于用户交互。
定义格式:
define p_variable_name = 500 -- 此时直接将500 assign给p_variable_name,不会弹出对话框提示用户输入
define p_variable_name -- 变量未赋值,弹出对话框提示用户输入值
使用格式:
select department_id into v_dept from emp where employee_id=& p_variable_name;
现将网上一篇关于变量分类的总结文章转帖如下。
原贴出处:http://superman-chenzs.itpub.net/post/29327/272479
1、标量类型:
- 只能存放单个数值的变量
- 定义时,必须要指定标量的数据类型
1.1常用标量类型
(1)VARCHAR2(n)
定义可变长度的字符串
n指定字符串最大长度
n最大值是32767字节
使用时必须指定长度
当在PLSQL块钟使用该数据类型操纵VARCHAR2表列时,起数值长度不应超过4000字节
(2)CHAR(n)
定义固定长度字符串
n指定字符串的最大长度
n最大值是32767自己
使用时指定长度,若没指定,则使用默认值1
当在PLSQL块钟使用该数据类型操纵CHAR2表列时,起数值长度不应超过2000字节
(3)NUMBER(p,s)
定义固定长度的整数和浮点数
p表示精度,用于指定数字的总位数
s表示标度,用于指定小数点后的数字位数
(4)DATE
定义日期和数据数据
(5)BOOLEAN
定义布尔变量
值为:TRUE、FALSE、NULL
为PLSQL独有数据类型,表列不能采用该数据类型
NULL表示missing、inapplicable或者unknown
(6)LONG和LONG ROW
long:数据类型用于定义变长字符串,类似于VARCHAR2数据类型,但其字符串的最大长度为32760字节
long row:数据类型用于定义变长的二进制数据,其数据最大长度为32760字节
(7)BINARY_INTEGER
定义整数
数值范围-2147483647和2174483647之间
(8)BINARY_FLOAT和BINARY_DOUBLE
BINARY_FLOAT定义单精度浮点数(oracle 10g新增加)
BINARY_DOUBLE定义双精度浮点数(oracle 10g新增加)
(9)TIMESTAMP
定义时间和日期数据(oracle 9i新增加)
对其赋值方法与对date变量赋值方法完全相同
当显示TIMESTAMP变量数据时,不仅会显示日期,而且还会显示时间和上下午标记
1.2、定义标量类型
语法:
identifier [CONSTANT] datatype [NOT NULL] [ :=|DEFAULT expr]
identifier:指定变量或常量名称
CONSTANT:指定是常量
datatype:用于指定变量或常量的类型
NOT NULL:非空,有它是必须初始化
:= :赋值符合
DEFAULT:默认值
expr:初始值
1.3、标量定义规则
每行声明一个变量
变量的赋值使用:identifier := value;
变量名称最多30个字符
1.4使用%TYPE属性
安装数据库列或其他变量来确定新变量的类型和长度(具有动态性和绑定性)
语法:identifier Table.column_name%TYPE;
或 identifier other_variable_name%TYPE;
2、复合变量指用于存放多个值的变量
当定义复合变量时,必须要使用PL/SQL的复合数据类型
PL/SQL的复合数据类型包括:
PL/SQL记录
PL/SQL表(索引表)
PL/SQL嵌套表
VARRAY
关于这些复合数据类型,由相关章节给出
3、参照变量指用于存放数值指针的变量
可以通过参照变量来共享相同对象,从而降低占用空间
两种参照变量:
游标变量(REF CURSOR)
对象类型变量(REF obj_type)
关于这些参照变量,由相关章节给出
4、LOB变量用于存储大批量数据的变量
分为两种:
内部LOB:包括CLOB、BLOB、NCLOB,它们的数据被存储在数据库中,并且支持事务操作
外部LOB:BFILE,该类型数据被存储在OS文件中,并且不支持事务操作
CLOB:存储大批量字符数据
NCLOB:存储大批量字符数据,unicode编码
BLOB:存储大批量二进制数据
BFILE:存储指向OS文件的指针
5、非PL/SQL变量5.1、替换变量(仅用于SQL *Plus或者用于原理和SQL *Plus相同的开发工具):
临时存储值
利用它可以达到创建通用脚本的目的
利用它可以达到和用户交互,故在SQL *Plus中又称交互式命令
替换变量的格式式在变量名称前加一个&,以便在运行SQL命令时提示用户输入替换数据,然后按输入数据运行SQL命令
语法:
(1)& :“&变量名”eg:&name;
生命周期:单次引用中,不需要声明,如果替换字符或日期类型,最好用单引号扩起
使用范围:where、order by、列表达式、表名、整个SELECT 语句中
(2)&& :“&&变量名”eg:&&name;
生命周期:整个会话(session连接),不需要声明
(3)define :“define 变量名=变量值”eg:DEFINE a = clark;
生命周期:整个会话,预先声明,使用时用&引用声明的变量
define variable=用户创建的CHAR类型的值:define 变量名=值;
define column_name(变量名):查看变量命令。
undefine 变量名:清除变量
define:查看在当前会话中所有的替换变量和它们的值
(4)accept
生命周期:整个会话
预先声明,可以客户化提示信息,使用时用&引用声明的变量。
定义:
accept 变量名name number/char/date prompt '提示信息内容'即:ACC[EPT] variable [NUM[BER] | CHAR | DATE] [FOR[MAT] format] [DEF[AULT] default] [PROMPT text | NOPR[OMPT]] [HIDE]
解释:
PROMPT命令:用于输出提示用户的信息,以便使用户了解脚本文件的功能和运行情况
PAUSE命令:用于暂停脚本文件的运行
HIDE选项:用于隐藏用户的输入,使别人不可见,安全
这条命令的意思是:当plsql程序段执行到变量name的时候,此时需要用户的交互才能继续执行下去,plsql程序段会显示“提示信息内容”让用户输入相关信息(如果指定hide选项,那么在接下去用户输入的东西将被用星号显示出来增加安全,有点像输入密码),用户输入的内容被接收到并且把它付给name,关于在“提示信息内容”下用户输入的内容的类型,plsql程序段开发人员来通过number/char/date指定,变量name得到正确的值以后,继续执行相关下面的程序!
例:accept a char prompt '请输入员工的雇佣时间(yyyy-mm-dd):' hide
例:accept a char prompt 'input a:' hide
替换变量非常的依赖SQL *Plus的环境,当环境变量verify被关闭的时候它就不可用,只有通过打开它才能使用:
set verify(环境变量) off;关闭调试命令(关掉替换过程)
set verify(环境变量) on;打开调试命令(可以看到替换过程)
5.2、SQL *PLUS环境变量(仅用于SQL *Plus或者用于原理和SQL *Plus相同的开发工具):
ECHO 显示回显
HEADING {OFF/ON}是否显示列标题
ARRAYSIZE{20/n}每一次从查询得到的返回量的大小
FEEDBACK{OFF/ON}回馈,反馈信息
LONG{80/n}on/text} LONG类型
LINESIZE 行的宽度
SET LINESIZE n(最好是在200之内)
PAGESIZE :设置页的大小。SET PAGESIZE N
wrap{off/on} 折行
SET 修改
SHOW 显示
SQL *PLUS中格式化显示的命令:
COLUMN[column option]可以设置字段或字段别名的格式
COLUMN last_name HEADING employee|name '|'代表换行
col 字段名 查看命令
CLE[AR]:清除列的格式
HEA[DING] TEXT:设置列标题
FOR[MAT] FORMAT:格式化显示列的值,对字符和数字有效,对日期无效,eg:column salary justify left format $999,999.00,其中justify left:左对齐;col manager_id format 999999999
限制字符串的长度有A+数字限制
限制数字的长度有9,有几为9就限制成几位。
NOPRINT/PRINT NOPRINT:把一个字段从输出上屏蔽掉(返回但不显示)。
col 字段名 noprint/print.
NULL如果有NULL值,显示什么。
col name null 'on employee'
TTITLE[text/off/on]设置报表的表头
BTITLE[text/off/on]设置报表的表尾
做报表的时候要先想好PAGESIZE的大小。
BREAK ON [REPORT_ELEMENT]
压制重复值的显示,只能跟一个字段名才有效,eg:
select department_id,last_name
from employees
where rownum<30
order by 1,2;
break on department_id
5.3、做PL/SQL脚本文件的过程:变量定义accept
环境变量设置SET
格式控制命令
SPOOL
使用变量的SQL
SPOOL OFF
清除格式控制
重置环境变量
释放变量
5.4、引用非PL/SQL变量当要在PL/SQL块中引用非PL/SQL变量时,也就是要引用PL/SQL块所在地的host变量(或称“环境变量”)时,必须要在非PL/SQL变量前加冒号(“:”),eg:”:name”,name为非PL/SQL变量。
分享到:
相关推荐
在Oracle数据库的PL/SQL环境中,绑定变量是一种优化SQL语句执行效率的重要技术。它主要应用于动态SQL或者多次执行的SQL语句,以减少数据库的解析开销,提高系统性能。本文将详细讲解PLSQL中的绑定变量及其用法。 ...
以上是对Oracle PL/SQL编程手册中的SQL*PLUS部分进行的详细解析,涵盖了SQL命令、SQL*PLUS命令、数据字典查询、逻辑运算符以及各种查询条件的使用方法。这将有助于读者更好地理解和掌握Oracle数据库的基础操作与查询...
**SQL Plus** 是Oracle数据库系统提供的一种交互式工具,用于执行SQL语句和脚本,以及管理数据库环境。它允许用户通过命令行接口进行数据库操作,包括查询、更新、插入和删除数据等。 ##### SQL命令关键字 SQL ...
此外,SQL*PLUS还有自己的特定命令,如`@`用于运行脚本,`DEFINE`用于定义变量,`PAUSE`暂停执行等,这些命令不被当作标准SQL处理。 在数据库查询方面,手册详细介绍了如何查询和操作数据。例如,`TAB`命令可以列出...
- B (`SET DEFINE`) 不是一个标准的 SQL 命令,它通常与 SQL 客户端工具如 SQL*Plus 相关,用于设置变量替换定义。 - D (`CREATE TABLE`) 是创建新表的 SQL 命令。 5. **数据库对象引用**: - 在 SELECT 语句中...
- `DEFINE`:定义变量。 - `PAUSE`:暂停 SQL*Plus,等待用户输入。 - `DEL`:删除文件。 - `QUIT`:退出 SQL*Plus。 - `DESCRIBE`:显示表或视图的列信息。 - `REMARK`:添加注释。 - `DISCONNECT`:断开...
### Oracle Database 11g PL/SQL 编程...以上知识点总结了 Oracle Database 11g PL/SQL 编程中常见的 SQL 命令分类、字符串处理技巧以及变量的定义和声明方法。这些基础知识对于初学者理解和掌握 PL/SQL 编程非常重要。
根据提供的文件信息,我们可以归纳出以下关于Oracle PL/SQL编程的重要知识点: ### 一、创建包(Package)及其声明 #### Package Specification (包规范) 在Oracle数据库中,**包**是一种将过程、函数、类型、游标...
此外,手册还列出了SQL*Plus特有的命令,例如`@`用于执行存储在文件中的命令,`DEFINE`用于定义变量,`PAUSE`用于暂停程序直到用户按下任意键等。这些命令提供了额外的功能,使得SQL Plus成为一个功能强大的数据库...
这涉及到$APPL_TOP下的文件组织结构,如admin、bin、forms、mesg、plsql等目录,以及对环境变量的修改,以适应客户化需求。 4. **数据库对象命名规则**:为了保持数据库对象的清晰性和一致性,创建的对象应以子模块...
《Oracle Call Interface Programmer's Guide 10g》是Oracle数据库开发者的重要参考资料,它详细阐述了如何使用Oracle Call Interface (OCI)编程接口来开发应用程序,与Oracle数据库进行交互。以下是该指南中的关键...
Oracle开发学习笔记主要涵盖了一系列...以上就是Oracle开发学习笔记中涉及的一些核心知识点,它们涵盖了性能监控、调试、字符处理、PL/SQL编译以及NLS参数等多个方面,对于Oracle数据库开发者来说是非常实用的技术。
可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的...
在Oracle数据库中,`DBMS_SQL`包是一个功能强大的工具,用于执行动态SQL语句。它提供了处理动态SQL语句的能力,使得开发人员能够灵活地构建和执行SQL语句,而不需要预先定义表结构或SQL文本。`DBMS_SQL`主要通过以下...
**SQLPlus**则是Oracle数据库的一个命令行工具,用于执行SQL语句、脚本文件等,是Oracle数据库管理员和开发人员日常工作中不可或缺的工具之一。 #### 二、安装与配置 1. **安装Uedit32:** - 首先下载并安装Uedit...
- **DEFINE** - 用于定义变量。 - **PAUSE** - 用于暂停程序的执行,直到用户按下任意键继续。 - **QUIT** - 用于退出 SQL*PLUS。 - **DESCRIBE** - 用于显示表或视图的结构。 - **SET** - 用于设置 SQL*PLUS 环境...