Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5228874
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: Oracle

2009-09-08 01:22:23

2.1.2 充分利用PL/SQL 变量

变量可以被用来保存临时值。变量的语法为:

 
变量也可能被称为标识符。你需要熟悉命名变量的限制条件:变量必须以字母开头,最大为30 个字符长。考虑下面的范例,其中包含有效标识符的列表:
 

请注意,标识符v_last_name 和V_LAST_NAME 被认为是相同的,因为PL/SQL 是不区分大小写的。

接下来,考虑如下非法标识符范例:

 

标识符X+Y 是非法的,因为它包含一个加号。加号是PL/SQL 预留使用的,以表示一个加法操作。由于标识符必须以字母开头,所以1st_year 也是非法的。最后,student ID 中包含空格,所以也是非法的标识符。

接下来,考虑另一个例子:

 

在这个例子中,声明一个名为?rst&last_names 的变量。接着,给这个变量赋值,并在屏幕上显示变量值。当运行程序时,会得到如下输出:
 

考虑所产生的输出。由于& 出现在?rst&last_names 变量中,变量的一部分被认为是替代变

量(本书第1 章已经讨论过替代变量)。换句话说,PL/SQL 编译器会把变量名中& 号之后的部分(last_names)视为替代变量。结果是,每当编译器遇到& 符号,都会提示用户输入last_names 变量的值。

要特别注意,尽管这个例子不会导致任何语法错误,但是?rst&last_names 仍旧是一个无效的标识符,因为& 被预留用于替代变量。为避免这个问题,可以把?rst&last_names 变量名修改为?rst_and_last_names 。因此,只有当需要在程序中把& 符号用作替代变量时,才会在变量中使用它。同时,考虑所开发和运行PL/SQL 语句的程序类型也很重要。如果程序(或者PL/SQL 语句块)被SQL *Plus 执行,确实就是如此。当编写存储代码时,不要使用& 符号,但是也许会使用参数。

提示如果使用Oracle SQL Developer,需要在运行这个脚本之前,单击最左边的按钮“Enable DBMS Output”。

 

A)如果在SQL *Plus 或者Oracle SQL Developer 中运行这个范例,会得到什么结果呢?

答案:假设执行SET SERVEROUTPUT ON,只会得到输出‘born on’。原因是v_name 和v_dob 变量没有值。

B)运行这个程序,查看运行结果。当焦点从一行切换到另一行时,解释所发生的事情。

答案:3 个变量被声明。当每个变量被声明时,其初始值为null 。v_name 变量被定义为VARCHAR2,长度是30;v_dob 变量被定义为字符类型日期;v_us_citizen 变量被定义为BOOLEAN 。当可执行部分开始时,这些变量没有值。因此,当使用DBMS_OUTPUT 来输出这些变量的值时,结果为空。

如果按照下面的样子替换这些变量,就可以看到具体值:使用COALESCE(v_name,'No Name')替代v_name,使用COALESCE(v_dob,'01-Jan-1999')替代v_dob 。

COALESCE 函数会把表达式列表中每个表达式与NULL 进行比较,并返回第1 个非NULL 表达式的值。在此情况下,会比较v_name 变量和‘No Name’字符串,并返回值‘No Name’。这是因为v_name 变量尚未被初始化,因此其值还是NULL 。本书第5 章会讨论COALESCE 函数。

运行这个语句块,会得到如下结果:

 
为利用变量,必须在PL/SQL 语句块的声明部分中声明它。必须给变量赋予一个名称,定义其数据类型。也可以给这个变量赋予一个初始值。请注意,如果没有给变量赋予初始值,则值为 NULL 。也可能限制声明的变量是非空的,这时候必须给变量赋予初始值。变量必须首先被声明,然后才能被引用。PL/SQL 代码不允许向前引用。可以把变量设置为一个常量,这意味着这个变量的值不能被修改。
阅读(1164) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~