一、变量介绍

(1)变量的使用
可以使用变量:

  • 临时存储数据
  • 存储值的操作
  • 可重用性

SQL server对变量进行定义 sql中定义变量_初始化

(2)PL/SQL中的变量处理
变量是:

  • 在声明部分中声明和初始化
  • 在可执行部分中使用和分配新值

变量可以是:


  • 作为参数传递给PL/SQL子程序
  • 指定保存PL/SQL子程序的输出

(3)声明和初始化PL/SQL变量
所有的PL/SQL变量都必须声明在引用之前的声明部分在PL/SQL块中。
声明的目的是分配为值存储空间,指定其数据类型,并将存储位置命名为你可以引用。
可以在声明语句中声明变量任何PL/SQL块、子程序或包。


二、变量声明和初始化变量

(1)语法

identifier [CONSTANT] datatype [NOT NULL] [:= expr | DEFAULT expr];

• identifier     定义该变量的名字

• CONSTANT  约束变量的值不可修改,常量必须在定义时初始化
• datatype     可以是标量、复合、引用或LOB数据类型。(本课程只包括标量、复合和LOB数据类型)。

• NOT NULL   约束该变量必须有值 (NOT NULL变量必须被初始化)
• Expr             可以是字面量表达式、另一个变量或包含操作符与函数的表达式的任何PL/SQL表达式

(2)习惯
小写斜体表示变量或占位符。
括号([…])包含一个或多个可选项,不插入括号。
竖杆代表在括号内两个或多个选项的选择,不要插入垂直条。

(3)声明和初始化变量

示例

declare
v_emp_hiredate date;
v_emp_deptno number(2) not null := 10;
v_location varchar2(13) := 'atlanta';
c_comm constant number := 1400;
v_population integer;
v_book_type varchar2(20) default 'fiction';
v_artist_name varchar2(50);
v_firstname varchar2(20):='rajiv';
v_lastname varchar2(20) default 'kumar';
c_display_no constant pls_integer := 20;
…

(4)在可执行部分中赋值

    在声明变量之后,可以在可执行文件中使用它作为PL/SQL块的一部分。例如,在下面的块中,变量v_myname在声明性部分块中声明。可以在同样的块的可执行部分中访问此变量。你认为这个代码块会输出什么?

declare
v_myname varchar2(20);
begin
dbms_output.put_line('my name is: '||v_myname);
v_myname := 'John';
dbms_output.put_line('my name is: '||v_myname);
end;

在这个示例中,将值约翰赋值给可执行部分。变量的值是关联My name is:

输出是:

my name is: 

my name is: John


在这个块中,变量v_myname被声明并初始化在声明部分。v_myname在初始化后持有为约翰的值。此值在可执行部分中被操作。

declare
v_myname varchar2(20):= 'john';
begin
v_myname := 'Steven';
dbms_output.put_line('my name is: '||v_myname);
end;

输出:

my name is: Steven


(5)将变量作为参数传递给PL/SQL子程序参数是由用户传递给程序的值,或由另一个定制程序的程序。

在PL/SQL中,子程序可以采用参数。你可以通过变量作为过程和函数的参数。


在下面的示例中,参数v_date正在通过程序PUT_LINE,这是程序包的一部分,DBMS_OUTPUT。

declare
  v_date varchar2(30);
begin
   select to_char(sysdate) into v_date from dual;
   dbms_output.put_line(v_date);
end;



将变量赋值给PL/SQL子程序输出


可以使用变量来保存作为函数的返回值。


--function to return number of characters in string
function num_characters (p_string in varchar2) return integer is
   v_num_characters integer;
begin
   select length(p_string) into v_num_characters from dual;
   return v_num_characters;
end;
--anonymous block: assign variable to function output
declare
    v_length_of_string integer;
begin
    v_length_of_string := num_characters('oracle corporation');
    dbms_output.put_line(v_length_of_string);
end;