您的位置:首页 > 数据库

PL/SQL语言、PL/SQL中的程序控制、PL/SQL存储过程

2019-05-28 01:35 357 查看

文章目录

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。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: