Oracle PLSQL

1、PLSQL的变量类型

1、系统内置的常规简单变量类型: 比如大多数 数据库表的字段类型都可以作为变量类型;
2、用户自定义复杂变量类型: 比如记录类型;
3、引用类型:保存了一个指针值;
4、大对象类型( LOB):保存了一个指向大对象的地址;

2、SQLPLUS变量

PLSQL本身没有输入输出功能,如果要想 像命令行运行C程序那样可以接收输入值,那必须依赖执行环境 把值传给PLSQL块,比如 iSQL Plus执行环境或者PLSQL Developer的Command Window 执行环境中, 有一种 substitution变量 可以用来接收输入值;而另一种Host变量可以把运行时的值传出到执行环境中。

3、PLSQL的变量声明

A.语法

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

B.举例

  1. DECLARE
  2. v_hiredate DATE;
  3. v_deptno NUMBER(2) NOT NULL := 10;
  4. v_location VARCHAR2(13) := 'Atlanta';
  5. c_comm CONSTANT NUMBER := 1400;

C.说明

1、变量命名建议遵循通用规则,比如v_name 表示一个变量,c_name表示一个常量;
2、一般建议每一行声明一个变量,这样程序的可读性比较好;
3、如果声明了变量,但未进行初始化,则在没有赋值之前该变量的值为NULL; 一个好的编程习惯是对所有声明 的变量进行初始化赋值。
4、在同一个块中,避免命名与数据库表中的字段名相同的变量;

  1. DECLARE
  2. employee_id NUMBER(6);
  3. BEGIN
  4. SELECT employee_id
  5. INTO employee_id
  6. FROM employees
  7. WHERE last_name =
  8. 'Kochhar';
  9. END;

1,常规类型的变量声明

  1. DECLARE
  2. v_job VARCHAR2(9);
  3. v_count BINARY_INTEGER := 0;
  4. v_total_sal NUMBER(9,2) := 0;
  5. v_orderdate DATE := SYSDATE + 7;
  6. c_tax_rate CONSTANT NUMBER(3,2) := 8.25;
  7. v_valid BOOLEAN NOT NULL := TRUE;

2,PLSQL特有的%TYPE属性来声明与XX类型一致的变量类型

I.语法

  1. identifier Table.column_name%TYPE;

II.举例

  1. v_name employees.last_name%TYPE;
  2. v_min_balance v_balance%TYPE := 10;

3,可绑定变量(Bind Variable 也称为Host Variable,非PLSQL 变量)

可绑定变量是一种在缩主环境中定义的变量,所谓缩主环境一般指示SQLPLUS执行环境或者是 PLSQL Developer 的Command Window执行环境;可绑定变量可用于在运行时把值传递给PLSQL,创建语法:
VARIABLE return_code NUMBER
VARIABLE return_msg VARCHAR2(30)
在标准的PLSQL中定义变量是不能用VARIABLE关键字的,此关键字只在SQLPLUS执行环境中有效, 可使用PRINT语句输出变量内容。 在PLSQL中使用这种变量时,前面加”:”,以示区分。

  1. VARIABLE g_salary NUMBER
  2. BEGIN
  3. SELECT salary
  4. INTO :g_salary
  5. FROM employees
  6. WHERE employee_id = 178;
  7. END;
  8. /
  9. PRINT g_salary

4,DBMS_OUTPUT.PUT_LINE()介绍

Oracle 内置的Package中的函数DBMS_OUTPUT.PUT_LINE()来输出内置变量的值

  1. DECLARE
  2. v_sal NUMBER(9,2) := &p_annual_sal;
  3. BEGIN
  4. v_sal := v_sal/12;
  5. DBMS_OUTPUT.PUT_LINE ('The monthly salary is ' ||
  6. TO_CHAR(v_sal));
  7. END;

&p_annual_sal 在Plsql Developer的SQL window 执行环境中,可用于提示用户输入一个具体 的值
image.png
在SQLPLUS中执行 DBMS_OUTPUT.PUT_LINE() 前,必须先执行:SET SERVEROUTPUT ON ,而在PLSQL Developer的SQL Window中则不需要这句话

4、PLSQL中的注释语句

1、多行注释类似于java 或者 C , 使用 //
2、单行注释是在语句后面使用 –

  1. DECLARE
  2. ...
  3. v_sal NUMBER (9,2);
  4. BEGIN
  5. /* Compute the annual salary based on the
  6. monthly salary input from the user */
  7. v_sal := :g_monthly_sal * 12;
  8. END; -- This is the end of the block

5、SQL函数在PLSQL的过程语句中的使用

A.SQL函数可以在PLSQL中使用

单行的数值和字符串函数、数据类型转换函数、日期函数、时间函数、求最大、最小值的 GREATEST,LEAST 函数等;

B.SQL函数不可以在PLSQL中使用

Decode函数、分组函数(AVG, MIN, MAX, COUNT, SUM, STDDEV, and VARIANCE)等;

6、块嵌套和变量范围

image.png

7、变量限定词

在块嵌套的程序中,里层和外层有相同的变量声明,而里层的程序要访问外层的同名变量使用块限定词birthdate 是同名变量,限定词 outer 表示外层,里层要访问外层的bithdate时使用 outer.birthdate 这种格式
image.png