PL/SQL语言、PL/SQL中的程序控制、PL/SQL存储过程
文章目录
PL/SQL语言
PL/SQL的基本概念
PL/SQL也是一种程序语言,叫做过程化SQL语言。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据库和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL只有Oracle数据库有。
DEMO:第一个pl/sql程序
BEGIN --表示开始过程 NULL;---过程代码 END;--过程结束 /
运行结果如下:
DEMO:输出hello world
SET SERVEROUTPUT ON;//开启打印功能 BEGIN DBMS_OUTPUT.put_line('hello world'); END; / 定义变量 DECLARE v_num NUMBER; BEGIN DBMS_OUTPUT.put_line('变量的值是:'||v_num); END; /
运行结果如下:
DEMO:为变量赋值
DECLARE v_num NUMBER; BEGIN v_num:=30; DBMS_OUTPUT.put_line('变量的值是:'||v_num); END; /
运行结果如下:
DEMO:还可以给变量设置默认值
DECLARE v_num NUMBER:=100; BEGIN DBMS_OUTPUT.put_line('变量的值是:'||v_num); END; /
运行结果如下:
DEMO:根据雇员的编号查询出雇员的名字(而且要求编号从键盘输入)
DECLARE v_empno NUMBER; v_ename VARCHAR2(10); BEGIN DBMS_OUTPUT.put_line('请输入雇员的编号!'); v_empno:=&empno; SELECT ename INTO v_ename FROM emp WHERE empno=v_empno; DBMS_OUTPUT.put_line('编号是:'||v_empno||',雇员的名字是:'||v_ename); END; /
运行结果如下:
PL/SQL中的程序控制
DEMO:为变量设置默认值
DECLARE v_empno NUMBER NOT NULL:='7788'; BEGIN DBMS_OUTPUT.put_line('编号是:'||v_empno); END; /
DEMO:定义常量
DECLARE v_empno CONSTANT NUMBER; BEGIN DBMS_0UTPUT.put_line('编号是:'||v_empno); END; /
运行结果如下
24000
:
DECLARE v_empno CONSTANT NUMBER:=7788;--常量必须有初始值 BEGIN DBMS_OUTPUT.put_line('编号是:'||v_empno); END; /
运行结果如下:
常量使用CONSTANT修饰,必须有初始化值
DEMO:常量不能改变
DECLARE v_empno CONSTANT NUMBER:=7788; BEGIN v_empno:=7369; DBMS_OUTPUT.put_line('编号是:'||v_empno); END; /
运行结果如下:
此时表明常量不能重新赋值的。
DEMO:使用%TYPE定义变量的类型
DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; BEGIN DBMS_OUTPUT.put_line('请输入编号:'); v_empno:=&empno; SELECT ename INTO v_ename FROM emp WHERE empno=v_empno; DBMS_OUTPUT.put_line('编号是:'||v_empno||',姓名是:'||v_ename); END; /
运行结果如下 :
“表名.字段名%TYPE”:让变量的类型为指定的表的字段的类型
DEMO:使用%ROWTYPE声明变量
DECLARE v_empno emp.empno%TYPE;--表示该变量的类型是emp数据表中的empno字段的类型(NUMBER) v_result emp%ROWTYPE;--表示该变量可以接收查询到的所有字段的数据 BEGIN DBMS_OUTPUT.put_line('请输入编号:'); v_empno:=&empno; SELECT * INTO v_result FROM emp WHERE empno=v_empno; DBMS_OUTPUT.put_line('编号是:'||v_empno||',姓名是:'||v_result.ename||',职位:' ||v_result.job||',部门编号:'||v_result.deptno); END; /
代码运行结果如下:
DEMO:IF使用
DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) 人数 INTO v_count FROM emp; IF v_count>10 THEN DBMS_OUTPUT.put_line('数据量大于10'); END IF;--表示if结束 END;--过程结束 /
运行结果如下:
DEMO:if else
DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM emp WHERE job='SALESMAN'; IF v_count>10 THEN DBMS_OUTPUT.put_line('数据量大于10'); ELSE DBMS_OUTPUT.put_line('数据量小于或等于10'); END IF; END; /
运行结果如下:
DEMO:多if结构
DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM emp WHERE job='SALESMAN'; IF v_count>10 THEN DBMS_OUTPUT.put_line('数据量大于10'); ELSIF v_count<10 THEN DBMS_OUTPUT.put_line('数据量小于10'); ELSE DBMS_OUTPUT.put_line('数据量等于10'); END IF; END; /
运行结果如下:
PL/SQL存储过程
存储过程procedure是一组为了完成特定功能的SQL语句集合,之前的pl/sql只能编写一次执行一次或者多次,但是不能将其保存起来下一次使用,关闭窗口之后pl/sql语句就失效了。通过经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来调用。存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
DEMO:创建过程
CREATE OR REPLACE PROCEDURE hello_say AS BEGIN DBMS_OUTPUT.put_line('hello world'); END; /
代码执行结果如下:
此时就表示创建了一个过程,之后可以通过过程名称hello_say来调用
DEMO:调用过程(使用pl/sql)
BEGIN hello_say(); END; /
DEMO:使用命令执行存储过程
EXEC hello_say();
代码调用结果如下:
DEMO:有参数的存储过程
CREATE OR REPLACE PROCEDURE pro_count( a NUMBER, b NUMBER ) AS BEGIN DBMS_OUTPUT.put_line('a+b='||(a+b)); END; / EXEC pro_count(20,30);
代码运行结果如下:
DEMO:如果不传递参数
BEGIN pro_count(); END; /
代码运行结果如下:
DEMO:给参数设定默认值
CREATE OR REPLACE PROCEDURE pro_count( a NUMBER:=500, b NUMBER:=300 ) AS BEGIN DBMS_OUTPUT.put_line('a+b='||(a+b)); END; / EXEC pro_count();
代码运行结果如下:
DEMO:存储过程的局部变量
CREATE OR REPLACE PROCEDURE proc_count( a NUMBER:=300, b NUMBER:=700) AS result NUMBER; BEGIN result:=a+b; DBMS_OUTPUT.put_line('a+b='||result); END; / EXEC proc_count(20,30);
代码运行结果如下:
DEMO:存储过程的输出和输入参数
CREATE OR REPLACE PROCEDURE proc_count( a IN NUMBER:=30, b IN NUMBER:=70, c OUT NUMBER ) AS BEGIN c:=a+b; END; / DECLARE r NUMBER;--声明全局变量 BEGIN proc_count(20,30,r); DBMS_OUTPUT.put_line('r的值是:'||r); END; /
代码运行结果如下:
IN修饰则表示该参数需要在调用的时候传递进来,OUT修饰的参数则表示可以被返回,如果不写默认就是IN。
- Oracle PL/SQL语言基础_控制语句
- Oracle PL/SQL语言基础_控制语句
- PL/SQL程序语言的学习---PL/SQL块
- Oracle PL/SQL语言初级教程之操作和控制语言
- 源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 2(PL/SQL语言概览)
- Ch3 PL/SQL程序控制结构
- pl/sql程序语言
- 《PL/SQL 语言开发参考手册》之四:PL/SQL 控制语句
- 【DB.PL/SQL】程序流程控制 —— 异常处理
- 源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 3(PL/SQL语言概览)
- Oracle PL/SQL语言基础_控制语句
- 【DB.PL/SQL】程序流程控制 —— 循环 ——LOOP, END LOOP, WHILE, FOR, CONTINUE
- 源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 4(PL/SQL语言概览)
- 《PL/SQL 语言开发参考手册》之四:PL/SQL 控制语句
- PL/SQL程序语言的学习---概述
- 《PL/SQL 语言开发参考手册》之二:PL/SQL 程序结构
- 【DB.PL/SQL】程序流程控制 —— GOTO语句
- 《PL/SQL 语言开发参考手册》之二:PL/SQL 程序结构
- 【DB.PL/SQL】程序流程控制 —— IF, CASE
- 源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 5(PL/SQL语言概览)