PL / SQL变量值


常量

要声明常量,请在类型说明符之前放入关键字CONSTANT。

常量必须在其声明中初始化。

每次输入块或子程序时,都会初始化常量。

以下代码显示如何定义REAL类型的常量,并为常量指定一个不可更改的值5。

DECLARE   n_real      CONSTANT REAL    := 5.00;   n_value  CONSTANT INTEGER := 3;   n_boolean      CONSTANT BOOLEAN := FALSE; BEGIN   NULL; END; / 

 

DEFAULT

我们可以使用关键字DEFAULT而不是赋值运算符来初始化变量。

可以使用DEFAULT在用户定义的记录中初始化子程序参数,光标参数和字段。

对具有典型值的变量使用DEFAULT。对没有典型值的变量使用赋值运算符。

DECLARE   n_char       CHAR DEFAULT 'O';         -- Same as n_char CHAR := 'O';   n_length     INTEGER DEFAULT 40;  -- Typical value   n_count      INTEGER := 0;        -- No typical value  BEGIN   NULL; END; / 

 

NOT NULL

声明可以施加NOT NULL约束。

NOT NULL防止您为该变量分配一个空值。

指定NOT NULL的声明必须指定默认值。

DECLARE   i_id INTEGER(4) NOT NULL := 9999; BEGIN   NULL; END; / 

 

%TYPE

我们可以使用%TYPE来声明表列类型的变量

CREATE TABLE EMP (   empid  NUMBER(6) NOT NULL PRIMARY KEY,   deptid NUMBER(6) CONSTRAINT c_EMP_deptid CHECK (deptid BETWEEN 100 AND 200),   deptname VARCHAR2(30) DEFAULT 'Sales' ); -- from  w w w  . ja  va  2 s  . com  DECLARE   v_empid    EMP.empid%TYPE;   v_deptid   EMP.deptid%TYPE;   v_deptname EMP.deptname%TYPE; BEGIN   v_empid := NULL;   v_deptid := 50;    DBMS_OUTPUT.PUT_LINE ('v_deptname: ' || v_deptname);END; / 

 

%ROWTYPE属性

%ROWTYPE属性声明表示表中某一行的记录。

要引用记录中的字段,请使用record_name.field_name

记录字段不继承相应列的约束或默认值。

如果引用的项表更改,您的声明将自动更新。

CREATE TABLE EMP (   empid  NUMBER(6) NOT NULL PRIMARY KEY,   deptid NUMBER(6) CONSTRAINT c_EMP_deptid CHECK (deptid BETWEEN 100 AND 200),   deptname VARCHAR2(30) DEFAULT 'Sales' ); -- ww w.  j a  va2 s.  co m  DECLARE   emprec  EMP%ROWTYPE; BEGIN   emprec.empid := NULL;   emprec.deptid := 50;    DBMS_OUTPUT.PUT_LINE ('emprec.deptname: ' || emprec.deptname); END; / 

以下代码显示了如何声明一个表示表列子集的记录。

DECLARE       CURSOR c1 IS SELECT id, name FROM departments;       dept_rec c1%ROWTYPE;  -- includes subset of columns in table BEGIN   NULL; END; / 

以下代码显示如何从联接声明一个表示行的记录。

DECLARE       CURSOR c2 IS         SELECT employee_id, email, employees.manager_id, location_id           FROM employees, departments;       join_rec  c2%ROWTYPE;  -- includes columns from two tables  BEGIN       NULL; END; /