5.PL_SQL——变量的种类以及如何声明变量(autoprint, %TYPE)

一、变量的种类

PL/SQL中变量主要有以下几类:

Scalar:标量,单一变量,如Integer,Character等等,最为常见,使用最广;

Composite:复合变量,里面还有多种子结构,如数组等,使用也比较广泛;

Reference:引用类型,类似指针,指向某个类型

Large object(LOB):CLOB(CharacterLarge Object,存储文档),BLOB(Binary Large Object,存储二进制文件,如图片、声音等)

Non-PL/SQL variables: Bindvariables:绑定变量,环境变量。所谓环境就是指的PL/SQL所允许的环境,因为PL/SQL可以运行在C语言,JAVA语言等等语言中,C语言和JAVA语言就是PL/SQL的环境,有环境就需要对环境进行一些定义和配置,这就是这种变量的作用。

二、声明和初始化变量的标准

变量声明和初始化应遵循以下标准

1. 遵循命名规范,这样有利于代码的可维护性

2. 见名知意,使用有意义的名字

3. 每一行定义一个变量,以便与代码的维护

4.对于定义为非空或常量的变量进行初始化

5. 使用":="或者“DEFAULT”来赋初值

6.不要使用列名来作为变量名以防止混淆:因为如果一个变量和列名一样,PL/SQL则优先将其解释为列名。如下面这个例子:


SQL> edit

DECLARE
   employee_id NUMBER(6);
BEGIN
   SELECT employee_id
   INTO       employee_id
   -- 变量名和列名重复了,容易发生混淆
   FROM    employees
   WHERE   last_name = ‘Kochhar‘;
   DBMS_OUTPUT.PUT_LINE(‘The resultis ‘ || employee_id);
END;

SQL> /

Theresult is 101
PL/SQLprocedure successfully completed.

其中变量名和列名重合了,虽然有时候可以运行,但无法保证结果正确。

7. 如果constraint定义为NOT NULL,则声明时必须为其赋初值。

三、各类型变量详解

1. Scalar Variable标量

Scalar变量是使用最广泛的一种变量,它只包含单一的值,内部没有更复杂的结构,例如:

TRUE——Boolean;

25-JAN-01——Date;

256120.08——Number;

“Atlanta”——String;

“The Soul ofthe lazy man desires, and he has nothing; but the soul of the diligent shall bemade rich.”——String(如果该值不长,比如CHAR或VARCHAR通常最多可存储2000到4000个字符,则可以作为字符串,否则最好作为CLOB类型,即无结构文档);

常见的Scalar变量主要有以下几种:

CHAR [(maximum_length)] ——长度不可变

VARCHAR (maximum_length) ——长度可变

NUMBER [(precision,scale)]

BINARY_INTEGER

BINARY_FLOAT

BINARY_DOUBLE

PLS_INTEGER

BOOLEAN

DATE

--------------以下几类在内部其实都存储为数字-----

TIMESTAMP

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE

INTERVAL YEAR TO MONTH

INTERVAL DAY TO SECOND

下这个例子演示了如何定义Scalar变量:

  DECLARE
     v_emp_job            VARCHAR2(9)
     v_count_loop         BINARY_INTEGER := 0;
     v_dept_total_sal     NUMBER(9,2) := 0;
     v_orderdate          DATE := SYSDATE + 7;
     c_tax_rate           CONSTANT NUMBER(3,2):= 8.25;
     v_valid              BOOLEAN NOTNULL := TRUE;
     ...

Scalar变量中的布尔型变量有以下几个特点:

1. Oracle中BOOLEAN型的变量和其他编程语言不同,它除了TRUE和FALSE以外,还有NULL值;

2. 在进行条件判断时,可以使用逻辑操作符: AND, OR和NOT;

3. 数字、字符和表达式都可以返回布尔型的值。

2. Bind Variable绑定变量

绑定变量也称为环境变量,PL/SQL中的环境变量有以下特点:

1. 在特定环境中创建:如在C语言中,或者是在JAVA语言中;

2. 由于它是在环境中创建的,故也称为宿主变量;

3. 如果是在sql*plus中使用,则用关键字 VARIABLE来定义它;

4. 它可以用在SQL语句中,也可以用在PL/SQL块中;

5.即使PL/SQL块执行结束了,该环境变量仍然能够访问,因为即使程序结束了,环境是不会结束的;

6. 引用环境变量时,要在环境变量前面加上冒号“:”

下面来举例演示如何使用绑定变量:

SQL> VARIABLE b_salary NUMBER;

-- 在sql*plus中定义环境变量,使用VARIABLE关键字

SQL> edit

BEGIN  
        SELECT salary
        INTO  :b_salary
     -- 在PL/SQL块中引用绑定变量b_salary时,需要在变量前面加上冒号
        FROM  employees
        WHERE employee_id = 178;
END;
PL/SQLprocedure successfully completed.

SQL> PRINT b_salary;

--PL/SQL块已经运行完毕了,仍然能够访问到变量b_salary;
-- PRINT是sql*plus的命令,且现在不在PL/SQL块中,故引用该变量时无需加上冒号
  B_SALARY
----------
      7000

SQL> SELECT first_name, last_name FROMemployees WHERE salary =:b_salary;

 -- 由于b_salary是环境变量,故还能访问到;这里执行的是SQL语句,故需要使用冒号表示引用
FIRST_NAME           LAST_NAME
---------------------------------------------
Oliver               Tuvault
Sarath               Sewall
Kimberely            Grant

如果设置autoprint为打开状态,则可以将结果自动打印到屏幕上

SQL> VARIABLE b_emp_salary NUMBER

SQL> SET AUTOPRINT ON

# 设置自动打印功能

SQL> edit

  1 DECLARE
  2    v_empno NUMBER(6) :=&empno;
  3 BEGIN
  4    SELECT salary
  5    INTO :b_emp_salary
  6              FROM employees
  7     WHERE  employee_id = v_empno;
 8  END;
 9  /
Entervalue for empno: 178
old   2:       v_empno NUMBER(6) :=&empno;
new   2:     v_empno NUMBER(6) :=178;
PL/SQLprocedure successfully completed. 
B_EMP_SALARY
------------
 7000

3. LOB Large Object 数据类型

LOB类型的数据主要有以下几种:

A. CLOB——用来存放字符串;

B. BLOB——用来存放二进制文件,如图片等;

C. BFILE——因为这类文件体积很大,故存放在磁盘上,而数据库中存放的只是指针,而不是文件本身,它的访问速度可能会比BLOB更快

D. NCLOB——用来存放一些非英文字母的文字

4. Composite 复合变量

复合型变量中可以存放多种其他类型的变量,如RECORD, AREA,TABLE等类型的变量,其中还可以存放布尔型、日期型、字符型、LOB型的其他变量。

四、 %TYPE的作用


%TYPR是PL/SQL中独有的一种属性。比如以下这个语句:

SELECT first_name

INTO v_fname

其中fist_name和v_fname的值是同一列,为了避免hardcode,即将代码写死在程序里,就可以用到%TYPE,在声明变量时使用%TYPE来表明该变量的数据类型和数据库中某张表某一列的数据类型是一致的。

以下两种情况可以用到%TYPE:

1. 和数据库中某一列类型相同;

2. 和另外一个已经声明过了变量类型相同。

使用%TYPE时需要加上前缀,这些前缀可以是:

1. 数据库中的表名和列名;

2. 已经定义过的变量名。

使用%TYPE来定义变量的格式如下:

identifier table.colum_name%TYPE;

下面来举例说明%TYPE的用法:

例1.

 ...
 emp_lname       employees.last_name%TYPE;
-- 定义一个变量emp_lname,它的数据类型和employees这个表中的last_name这一列是一致的
 ...

例2.

    ...
    balance      NUMBER(7,2);
    -- 定义第一个变量 balance,其数据类型为NUMBER
    min_balance  balance%TYPE:=1000;
    -- 定义第二个变量min_balance,其数据类型引用前一个变量balance的数据类型
    ...

5.PL_SQL——变量的种类以及如何声明变量(autoprint, %TYPE)

时间: 2024-11-06 14:58:24

5.PL_SQL——变量的种类以及如何声明变量(autoprint, %TYPE)的相关文章

17、内置变量、特殊变量、字符操作、声明变量 学习笔记

1.bash的内置变量 $PATH            环境变量路径 $HOSTNAME        系统主机名 $UID             系统当前用户ID $HISTFILE        历史文件存放路径 $HISTSIZE        系统可以保存的历史记录条目数 $HISTFILESIZE    历史文件可以保存的历史记录条目数 $HISTCONTROL     历史命令显示控制 $BASH            bash二进制程序文件的路径 $BASH_SUBSHELL 

freemarker声明变量

freemarker声明变量 1.使用assign创建和替换变量 (1)新建声明变量的ftl variable.ftl: <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>定义变量</title> </head> <body> <#--创建变量name

js中要声明变量吗?

你好,js语言是弱类型语言,无需申明即可直接使用,默认是作为全局变量使用的.建议:在function里时应使用var 申明变量,这样改变量仅仅只在function的生存周期内存在,不会污染到,全局控件.至于直接在<script>标签内使用的话则申明不声明效果都是一样的. 下面的文章可以帮助你更清楚的了解js变量一.变量的类型 Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个

【声明变量的规则】

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script type="text/javascript"> 7 //声明变量以及命名规则 8 var a; 9 var b; 10 var c,d; 11 /*alert(a);*/ 12 //声明变量的同时并且赋值 1

6.PL_SQL——注释、数据类型的转换、变量的范围和限定词标签

一.PL/SQL块的词法 PL/SQL中可以使用字母.数字.空格和特殊符号等,主要包括: 标识符--变量.关键字.保留字 分隔符--分号,逗号,加号或减号等 常量--字符串,数字,布尔型变量 注释--单行注释.多行注释 编写PL/SQL程序时,需要注意以下两点: 1. 字符和日期必须使用单引号引用,单引号中间可以引用双引号. 2. 数字可以是单独的数字,也可以使科学计数法. 为了养成良好的编程,最好使用tab键对代码进行缩进,有关键字的行回车另起一行,以使程序更加易读,逻辑结构更加清晰. 二.注

对循环内部反复声明变量的写法的一点想法?

之前看过一段代码,大概是是这样: function getVaildList(){ var _list = $('.list'); _list.each(function(item){ var listContent = $(this); var listName = listContent.find('listName').text(); var aaa = aaa; var bbb = bbb; //假设还有很多 var ccc = ccc; . . . . . . . . . //doso

mysql-进阶 声明变量/存储过程

声明变量 设置全局变量 set @a='一个新变量'; 在函数和储存过程中使用的变量declear declear a int unsigned default 1; 这种变量需要设置变量类型 而且只存在在 begin..end 这段之内 select .. into..  直接将表内内容赋值到指定变量当中 select name,bid into @a,@b from bank limit 1; 要注意一点就是变量名不能和字段名一致 存储过程 存储过程将一段通用的操作封装在一起 这样再不同平台

2015-09-28 第七节课 (js简介、声明变量、数据类型)

vs新建步骤 文件——新建项目——web——空白web应用程序——取名.位置.确定——此时软件会自动生成一个sln文件(解决方案),一解决方案下面可以有多个项目. 点击项目——新建文件夹css和js和image——新建html页面取名demo1 (推荐设置:工具——选项——可以设置下字体和颜色:文本编辑器——把常用的几种语言设上行号颜色提示) 什么是Javascript ? Javascript 是一种脚本语言,是一种脚本语言,结构简单,使用方便,其代码可以直接放入HTML文档中,可以直接在支持

javacscript 1 声明变量 数据类型

1.vs新建步骤 文件——新建项目——web——空白web应用程序——取名.位置.确定——此时软件会自动生成一个sln文件(解决方案),一解决方案下面可以有多个项目. 点击项目——新建文件夹css和js和image——新建html页面取名demo1 (推荐设置:工具——选项——可以设置下字体和颜色:文本编辑器——把常用的几种语言设上行号颜色提示) 2.什么是js JavaScript是一种脚本语言,结构简单,使用方便,其代码可以直接放入HTML文档中,可以直接在支持JavaScript的浏览器中