最近在做一个ORACLE存储过程的需求,之前完全没有做过,以下是最近整理的学习笔记。供参考。还有肯定还有其他操作但是没有涉及,也可以一起讨论。
ORACLE存储过程
PLSQL编程
- PLSQL(Procedure LanguageSQL)
- 是Oracle对sql语言的过程扩展化(类似于basic)
- 在SQL命令语言中,增加了过程处理语句(如分支,循环等),使SQL语言具有处理过程。
HelloWorld
-- Created on 2021/5/8 by ZJP
declare
--类似于java中的声明
-- Local variables here
i integer;
begin
-- Test statements here
-- 执行语句,异常处理。
DBMS_output.put_line('Hello World');
end;
- 在Sqlplus中,存储过程后添加
/
表示执行该存储过程。 set serveroutput on
开启输出窗口,才能输出语句。
变量
- 普通数据类型(char,varchar2,date,number,boolean,long)
- 特殊变量类型
引用型变量:取决于表字段类型
记录型变量:接收的不是一个字段的值而是一整条记录的值
声明变量方式
-- 变量名 变量类型(变量长度)
v_name varchar(20);
- 变量赋值
- 直接赋值语句
:=
比如 ,v_name:=‘张三’ - 语句赋值,使用
select ... into ...赋值
,比如(语法,select 值 into 变量)
示例打印人员信息
-- 打印人员信息
declare
-- Local variables here
v_name VARCHAR2(20) :='张三';
v_sal NUMBER;
v_addr VARCHAR(200);
begin
-- 直接赋值
v_sal :=15800;
--语句赋值
SELECT '山西省太原市' INTO v_addr FROM dual;
--打印输出
DBSM_OUTPUT.PUT_LINE('姓名:'||v_name||',薪水:'||v_sal||',地址:'||v_addr);
end;
引用型变量
- 变量取决于表中字段类型和长度
-- 通过员工号,打印员工信息
DECLARE
-- 姓名
V_NAME emp.ename%TYPE;
-- 薪水
V_SAL NUMBER;
BEGIN
SELECT ENAME,SAL INTO V_NAME,V_SAL FROM EMP WHERE EMPNO ='7839';
--打印输出
DBSM_OUTPUT.PUT_LINE('姓名:'||V_NAME||',薪水:'||V_SAL);
END;
-- EMP 表名
-- ENAME,SAL 列名
推荐使用引用型定义变量。更加能够适应对数据