PLSQL编程

PLSQL

ORACLE 数据库中包含一种过程化语言,称为 PL/SQL(Procedural Language/SQL)。

PL/SQL 是 ORACLE 的专用语言,它是对 SQL 语言的扩展,它允许在其内部嵌套普通的 SQL 语句。

基本结构

[DECLARE]
--声明部分,可选
BEGIN
--执行部分,必选
[EXCEPTION]
--异常处理部分,可选
END

变量

避免使用Oracle等内置使用的关键字。

可以使用SYSDBA进行登录 PLSQL进行查询关键字

select * from v$reserved_words order by keyword asc;

数据类型

PLSQL支持所有的SQL数据类型

-- 基本类型
number (decimal,float,integer,等)
char
varchar2
boolean
date
timestamp
--... 等等


-- 复合类型
%type -- 引用变量和数据库表列数据类型一致
%rowtype -- 表的一行记录类型

变量声明

普通变量、常量

DECLARE
  -- 变量的名称 变量的类型 :=[赋值运算符] 值; 称为声明变量并初始化;
  v_num1 number :=200; 
  v_num2 number := 0;
  -- 常量定义
  PI constant number := 3.1415926;
  v_result number;
BEGIN
  v_result := v_num1 / v_num2;
  -- 以下你就认为是java中的 system.out.println();
  DBMS_OUTPUT.put_line('结果为:' || v_result);
EXCEPTION
  WHEN OTHERS THEN
      DBMS_OUTPUT.put_line('程序有异常!');
END;

引用型变量

-- 与ORACLE中表联系起来 查询Student的姓名信息打印到控制台
DECLARE
-- 表.列%type; 指定表中某个列的类型长度定义变量
   v_name student.name%type;
BEGIN
   -- INTO 用于 SELECT 查询语句中,表示把查询的列数据赋值给相应的变量
   SELECT name INTO  v_name FROM student WHERE sid = 1;
   -- || 用于拼接字符
   DBMS_OUTPUT.put_line('Name:'||v_name);
END;

记录型变量

DECLARE
   -- 表中的一行作为变量的类型
   v_student_row student%rowtype;
BEGIN
   SELECT *  INTO v_student_row  FROM student WHERE sid = 1;
   DBMS_OUTPUT.put_line(v_student_row.name||','||v_student_row.sid);
END;

控制分支循环

IF THEN ELSEIF ELSE

-- 判断语句
DECLARE
   v_age number:=&age;
BEGIN
   IF v_age < 12 THEN
      DBMS_OUTPUT.put_line('A');
      ELSIF v_age < 30 THEN
           DBMS_OUTPUT.put_line('B');
      ELSIF v_age < 50 THEN
           DBMS_OUTPUT.put_line('C');
      ELSIF v_age < 100 THEN
           DBMS_OUTPUT.put_line('D');
   ELSE
           DBMS_OUTPUT.put_line('F!');
   END IF;  
END;

循环

包括 for、loop、while 3种

-- 数数,从1数到100,输出到控制台  FOR 变量名称 IN 范围 LOOP 循环体 END LOOP 
DECLARE
   v_num number :=&num;
BEGIN
   
   FOR i IN  REVERSE 1..v_num LOOP
     
   DBMS_OUTPUT.put_line(i);
   
   END LOOP;
END;

-- LOOP  循环体  END LOOP : EXIT WHEN条件
DECLARE
   v_num number :=&num;
   v_index number := 1;
BEGIN
   LOOP
    -- 循环退出的语句
    EXIT WHEN v_index > v_num;
    DBMS_OUTPUT.put_line(v_index);
    v_index := v_index + 1;
   END LOOP;
END;

-- WHILE 条件   LOOP  循环体  END LOOP;
DECLARE
   v_num number :=&num;
   v_index number := 1;
BEGIN
   WHILE v_index <=  v_num LOOP
    DBMS_OUTPUT.put_line(v_index);
    v_index := v_index + 1;
   END LOOP;
END;


奖励一下