PLSQL编程

1.1概念和目的

什么是PL/SQL?

PLSQL是Oracle对sql语言的过程化扩展

指在SQL命令语言中增加了过程处理语句(如分支,循环等),使SQL语言具有过程处理能力

 

1.2程序结构

通过Plsql Developer工具的Test Window 创建程序模板或者通过语句在SQL Window编写

提示:PLSQL语言的大小写是不区分的

PL/SQL可以分为三个部分:声明部分,可执行部分,异常处理部分

在cmd命令行中使用sqlplus得

---打开输出开关(默认关闭)
set serveroutput on

 

 

-- Created on 2018/10/15 by TANLEI 
declare
  -- 声明变量的地方,还包括游标
  --相当于public class A{}
begin
  -- 执行部分
  --public static  void main(String args[]){
  --}

  --异常处理
  
  --System.out.println("hello world")
  DBMS_OUTPUT.put_line('hello world');
end;

其中declare部分用来声明变量或游标(结果集类型变量),如果程序中无变量声明可以省掉

DBMS_OUTPUT为oracle内置程序包,相当于java中的System.out,而put_line()是调用的方法,相当于println()方法

1.3变量

变量分类

  1. 普通数据类型(char,varchar2,number,boolean,long)
  2. 特殊变量类型(引用型变量,记录型变量)

声明变量的方式为:

变量名  变量类型(变量长度)  v_nume varchar(20);

 1.3.1普通变量

  • 直接赋值
  • 语句赋值 
-- 声明一个人的信息,姓名,薪水,地址
declare
  -- 姓名
  v_name VARCHAR2(50) := '张三';
  --薪水
  v_sal NUMBER;
  --地址
  v_addr VARCHAR2(200);
begin
  -- 直接赋值
  v_sal := 15800;
  --语句赋值
  select '上海传智播客' INTO v_addr FROM dual;

  --打印变量
  DBMS_OUTPUT.put_line('姓名:' || v_name || ',薪水:' || v_sal || ',地址:' ||
                       v_addr);
end;

1.3.2引用型变量 

变量的类型和长度取决于表中字段的类型和长度

 

emp%type  (引用型变量:表%type 代表类型)

 

通过表名.列名%TYPE指定变量的类型和长度,例如 v_name emp.name%TYPE;

 

举例:my_name emp.ename%type;
    引用emp表中ename列的类型作为变量my_name的类型,并且变量的类型始终与其保持一致

示例:查询emp表中某号员工的个人信息,打印姓名和薪水
-- 查询emp表中某号员工的个人信息,打印姓名和薪水 
declare 
  -- 姓名
  V_NAME emp.ename%Type;
  -- 薪水
  V_SAL emp.sal%TYPE;
   
begin
  -- 查询姓名和薪水并赋值给变量
  select ename,sal INTO V_NAME,V_SAL from emp  where empno=7839;
  
  --打印变量
  DBMS_OUTPUT.put_line('姓名:'||V_NAME||',薪水:'||V_SAL);
  
end;

 好处:灵活

1.3.3记录型变量

接收表中的一整行记录,相当于java的一个对象

语法:  变量名称  表名%ROWTYPE 例如:v_emp emp%rowtype

示例

查询并打印某号的员工的姓名和薪水

-- 查询emp表中某号员工的个人信息,打印姓名和薪水 
declare 
  -- 记录型变量
  v_emp emp%ROWTYPE;
  
   
begin
  -- 查询并赋值给变量
  select * INTO v_emp from emp  where empno=7839;
  
  --打印变量
  DBMS_OUTPUT.put_line('姓名:'||v_emp.ename||',薪水:'||v_emp.sal);
  
end;

1.4流程控制

 1.4.1条件分支

 语法

注意关键字ELSIF

begin
  if 条件1 then 执行1
  elsif 条件2  then 执行2
  else 执行3
  end if;
  
end;

 示例:判断emp表中记录是否超过20条,10-20之间,或者10条以下

 

-- 判断emp表中记录是否超过20条,10-20之间,或者10条以下
declare 
  -- 声明变量接收emp表中的记录数
  v_count number;
  
   
begin
 
   --查询并赋值给变量
  select count(1) INTO v_count from emp;
  
  if v_count>20 then
     DBMS_OUTPUT.put_line('emp表中的记录数在20以上为:'||v_count);
  elsif v_count>=10  then 
     DBMS_OUTPUT.put_line('emp表中的记录数在10-20之间为:'||v_count);
  else 
     DBMS_OUTPUT.put_line('emp表中的记录数在10以下为:'||v_count);
  end if;
  
end;  

1.4.2循环

loop循环

语法

begin
 
  loop
     exit when 退出循环条件
  end loop  
 
end;

 示例:打印数字1-10

 

-- 打印数字1-10
declare 
  -- 声明一个循环变量
  v_num number:=1;
  
   
begin
 
   loop
     EXIT WHEN v_num>10;
     DBMS_OUTPUT.put_line(v_num);
     
     --循环变量的自增长
     --java
     --v_num++
     v_num:=v_num+1;
   end loop;
  
end;

  

posted @ 2018-10-17 00:01  言西早石头侠  阅读(210)  评论(0编辑  收藏  举报