基于Oracle 数据库存储过程的创建及调用

PLSQL编程

  • 概念和目的
  1. 什么是PLSQL
    PL/SQL(Procedure Language/SQL)
    PLSQL是Oracle 对sql语言的过程化扩展(类似与Basic)
    指在SQL命令语言中增加了过程处理语句(如分支,循环等),使SQL语言具有过程处理能力。
  2. 程序结构
    通过PLSQL Developer 工具的Test Window 创建程序模板或者通过语句SQL window编写
    提示:PLSQL语言的大小写是不区分的。
    PL/SQL可以分为三 部分:声明部分,可执行部分,异常处理部分。

 Declare  
 -- 声明变量 游标
 I integer
 BEGIN 
 -- 执行语句
 -- 【异常处理】
 END;

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

  • 输出Hello Word
begin
  -- Test statements here(-- 注释)
  dbms_output.put_line('hello word');
end;

F8 执行结果:
在这里插入图片描述
CMD 命令窗口 模式运行:
:执行结束后并未输出结果,默认情况下,输出选项是关闭状态,我们需要开启一下,set serveroutput on
在这里插入图片描述

  • 变量
    PLSQL编程中常见的变量分两大类:
    1 普通数据类型(char,varchar2,date,number,boolean,long);
    2 特殊变量类型(引用型变量,记录型变量);
    声明变量的方式为:
变量名 变量类型(变量长度) 例如:v_name varchar2(20);

普通型变量
变量赋值的方式有两种:
1 直接赋值语句 :=
v_name varchar2(20) :=‘lisi’;
2 语句赋值,使用select …into…赋值(语法select 值 into 变量)
select ename,sal into v_name,v_sal from emp where empno=7898;
例如:
打印人员信息,包括:姓名,薪水,地址

-- 打印人员信息,包括:姓名,薪水,地址
declare 
  -- Local variables here
  -- 姓名
  v_name varchar2(20) :='lisi';
  -- 薪水
  v_sal number;
  -- 地址
  v_addr varchar2(200);
  i integer;
begin
  -- Test statements here
  dbms_output.put_line('hello word');
  -- 直接赋值
  v_sal :=1500;
  -- 语句赋值
  select '上海昆山' INTO  v_addr from dual;
  -- 输出语句
  dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal||'地址:'||v_addr); 
end;

在这里插入图片描述
输出结果集:

在这里插入图片描述
引用变量
变量的类型和长度取决于表中字段的类型和长度。
通过表名.列名%TYPE 指定变量的类型和长度.
例如:v_name emp.ename%TYPE;
【实例】 查询emp 表中7839 员工的个人信息,打印姓名和薪水

  • 普通变量必须知道表中的字段类型和长度才能确定变量的长度和类型
-- 查询emp表中7839号员工的个人信息,打印姓名和薪水
declare 
  -- Local variables here
  -- 姓名
  v_name varchar2(20);
  -- 薪水
  v_sal number;
begin
  -- Test statements here

  -- 语句赋值
  select ename,sal into v_name,v_sal from emp where empno=7898;
  -- 输出语句
  dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal); 
end;

在这里插入图片描述
结果:
在这里插入图片描述
使用引用变量的好处

  • 使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑列的类型,使用%TYPE是非常好的编程风格,因为它使得PL/SQL更加的灵活。更加适应于对数据库定义的更新。
    在这里插入图片描述
-- 查询emp表中7839号员工的个人信息,打印姓名和薪水
declare 
  -- Local variables here
  -- 姓名
  v_name emp.ename%TYPE;
  -- 薪水
  v_sal emp.sal%TYPE;
begin
  -- Test statements here

  -- 语句赋值
  select ename,sal into v_name,v_sal from emp where empno=7898;
  -- 输出语句
  dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal); 
end;

  • 记录类型变量
    接收表中的一整行记录,相当于Java中的一个对象。
    语法:变量名称 表名%ROWTYPE,
    例如:v_emp emp%rowtype;
    ----查询并打印7898 的姓名和薪水
-- 查询emp表中7898号员工的个人信息,打印姓名和薪水
declare 
  -- Local variables here
  -- 记录型变量
  v_emp emp%ROWTYPE;

begin
  -- Test statements here

  -- 语句赋值
  select * into v_emp from emp where empno=7897;
  -- 输出语句
  dbms_output.put_line('姓名:'||v_emp.ename||',薪水:'||v_emp.sal)
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值