一、变量的使用
(1)使用变量的原因
•临时存储数据•储存值的操作
•可重用性
(2)处理PL / SQL中的变量
变量是:•在声明部分声明并初始化
•在可执行部分中使用并分配新值
变量可以是:
•作为参数传递给PL / SQL子程序
•分配以保存PL / SQL子程序的输出
(3)声明变量
在PL / SQL块中引用所有PL / SQL变量之前,必须在声明部分声明它们。•声明的目的是为值分配存储空间,指定其数据类型并命名存储位置以便引用它。
•您可以在任何PL / SQL块,子程序或包的声明部分声明变量。
语法
identifier [CONSTANT] datatype [NOT NULL] [:= expr | DEFAULT expr];
(4)初始化变量
变量在DECLARE部分中分配一个内存位置。 变量可以同时分配一个值。 这个过程称为初始化。
DECLARE
v_counter INTEGER := 0;
BEGINv_counter := v_counter + 1;DBMS_OUTPUT.PUT_LINE(v_counter);
END;
(5)声明和初始化变量示例1
DECLAREfam_birthdateDATE;fam_size NUMBER(2) NOT NULL := 10;fam_location VARCHAR2(13) := 'Florida';fam_bank CONSTANT NUMBER := 50000;fam_population INTEGER;fam_name VARCHAR2(20) DEFAULT 'Roberts';fam_party_size CONSTANT PLS_INTEGER := 20;
(6)声明和初始化变量示例2
DECLAREv_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_nameVARCHAR2(50);v_firstname VARCHAR2(20):='Rajiv';v_lastname VARCHAR2(20) DEFAULT 'Kumar';c_display_no CONSTANT PLS_INTEGER := 20;
…
二、在可执行部分中分配值
声明变量后,可以在PL / SQL块的可执行部分中使用它。 例如,在下面的块中,变量v_myname在块的声明部分中声明。 您可以在同一个块的可执行部分访问此变量。 你认为这个块会打印什么?
DECLAREv_myname VARCHAR2(20);
BEGINDBMS_OUTPUT.PUT_LINE('My name is: '||v_myname);v_myname := 'John';DBMS_OUTPUT.PUT_LINE('My name is: '||v_myname);
END;
(1)在可执行部分中分配值
例1在这个例子中,值John被分配给可执行部分中的变量。 该变量的值与串 My name is:。
输出是:
My name is:
My name is: John
Statement process.
例2
在此块中,变量v_myname在声明部分中声明并初始化。 初始化后,v_myname保存值John。 该值在块的可执行部分中进行处理。
DECLAREv_myname VARCHAR2(20):= 'John';
BEGINv_myname := 'Steven';DBMS_OUTPUT.PUT_LINE('My name is: '||v_myname);
END;
输出是:
My name is: Steven
Statement processed.
(2)将变量作为参数传递给PL / SQL子程序
参数是由用户或另一个程序传递给程序以定制程序的值。 在PL / SQL中,子程序可以带参数。 您可以将变量作为参数传递给过程和函数。 在以下示例中,参数v_date正被传递给过程PUT_LINE,该过程是包DBMS_OUTPUT的一部分。
DECLAREv_date VARCHAR2(30);
BEGINSELECT TO_CHAR(SYSDATE) INTO v_date FROM dual;DBMS_OUTPUT.PUT_LINE(v_date);
END;
(3)分配变量到PL / SQL子程序输出
您可以使用变量来保存函数返回的值。
--function to return number of characters in string
FUNCTION num_characters (p_string IN VARCHAR2) RETURN INTEGER ISv_num_characters INTEGER;
BEGINSELECT LENGTH(p_string) INTO v_num_characters FROM dual;RETURN v_num_characters;
END;
--anonymous block: assign variable to function output
DECLAREv_length_of_string INTEGER;
BEGINv_length_of_string := num_characters('Oracle Corporation');DBMS_OUTPUT.PUT_LINE(v_length_of_string);
END;