Oracle --- PL/SQL

Posted 劳埃德·福杰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle --- PL/SQL相关的知识,希望对你有一定的参考价值。

PL/SQL语言是SQL语言的扩展,具有为程序开发而设计的特性,如数据封装、异常处理、面向对象等特性。PL/SQL是嵌入到Oracle服务器和开发工具中的,所以具有很高的执行效率和同Oracle数据库的完美结合。

在PL/SQL模块中可以使用查询语句和数据操纵语句(即进行DML操作),这样就可以编写具有数据库事务处理功能的模块。
至于数据定义(DDL)和数据控制(DCL)命令的处理,需要通过Oracle提供的特殊的DBMS_SQL包来进行。PL/SQL还可以用来编写过程、函数、包及数据库触发器。过程和函数也称为子程序,在定义时要给出相应的过程名和函数名。

(1)  DECLARE:声明部分标志
(2)  BEGIN:可执行部分标志
(3)  EXCEPTION:异常处理部分标志
(4)  END;:程序结束标志

输出

// 打开DBMS_OUTPUT.PUT_LINE函数的屏幕输出功能,系统默认状态是OFF,n表示输出缓冲区的大小,n的范围在2000~1 000 000之间,默认为2000
SET SERVEROUTPUT ON [SIZE n]

DBMS_OUTPUT.PUT(字符串表达式);
DBMS_OUTPUT.PUT_LINE(字符串表达式);
DBMS_OUTPUT.NEW_LINE;       //用来输出一个换行,没有参数

根据表的字段定义变量 

SET SERVEROUTPUT ON 
DECLARE
    v_ename	emp.ename%TYPE; --根据字段定义变量
BEGIN
    SELECT ename INTO v_ename
    FROM emp
    WHERE empno = 7788;
	DBMS_OUTPUT.PUT_LINE(v_ename);	--输出变量的值
END;

根据表的记录定义变量

SET SERVEROUTPUT ON 
DECLARE
    emp_record emp%ROWTYPE;--定义记录变量
BEGIN
    SELECT * INTO emp_record
    FROM emp
 	WHERE empno = 7788;--取出一条记录
  	DBMS_OUTPUT.PUT_LINE(emp_record.ename);	--输出记录变量的某个字段 
END;

定义和使用TABLE变量 

SET SERVEROUTPUT ON 
DECLARE
    TYPE type_table IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;  --类型说明
    v_t type_table;     --定义TABLE变量
BEGIN
    v_t(1):='MONDAY';
	v_t(2):='TUESDAY';
 	v_t(3):='WEDNESDAY';
	v_t(4):='THURSDAY';
    v_t(5):='FRIDAY';
    DBMS_OUTPUT.PUT_LINE(v_t(3));  --输出变量的内容
END;

分支结构

如果温度大于30℃,则显示“温度偏高”

SET SERVEROUTPUT ON
DECLARE
    V_temprature    NUMBER(5):=32;
    V_result    BOOLEAN:=false;
BEGIN
    V_result:= v_temprature >30;
    IF V_result THEN 
        DBMS_OUTPUT.PUT_LINE('温度'|| V_temprature ||'度,偏高');
    END IF; 
END;

根据性别,显示尊称。

SET SERVEROUTPUT ON
DECLARE
    v_sex    VARCHAR2(2);
    v_titil    VARCHAR2(10);
BEGIN
    v_sex:='男';
    IF v_sex ='男' THEN
        v_titil:='先生';
    ELSE
        v_titil:='女士';
    END IF; 
    DBMS_OUTPUT.PUT_LINE(v_titil||'您好!');
END;

选择结构

使用CASE结构实现职务转换

SET SERVEROUTPUT ON
DECLARE
    v_job    VARCHAR2(10);
BEGIN
    SELECT job INTO v_job
    FROM emp
    WHERE empno=7788;
    CASE v_job
    WHEN 'PRESIDENT' THEN 
        DBMS_OUTPUT.PUT_LINE('雇员职务:总裁');
    WHEN 'MANAGER' THEN  
        DBMS_OUTPUT.PUT_LINE('雇员职务:经理');
    WHEN 'SALESMAN' THEN
        DBMS_OUTPUT.PUT_LINE('雇员职务:推销员');
    WHEN 'ANALYST' THEN  
        DBMS_OUTPUT.PUT_LINE('雇员职务:系统分析员');
    WHEN 'CLERK' THEN  
        DBMS_OUTPUT.PUT_LINE('雇员职务:职员');
    ELSE  
        DBMS_OUTPUT.PUT_LINE('雇员职务:未知');
    END CASE;
END;

循环结构

求:1^2+3^2+5^2+...+15^2 的值

SET SERVEROUTPUT ON
DECLARE
    v_total NUMBER(5):=0;
    v_count NUMBER(5):=1;
BEGIN
	LOOP
	    v_total:=v_total+v_count**2;
    	EXIT WHEN v_count=15; --条件退出
        v_count:=v_count+2;
  	END LOOP;
 	DBMS_OUTPUT.PUT_LINE(v_total);
END;

用FOR循环输出图形。 

SET SERVEROUTPUT ON
BEGIN
    FOR I IN 1..8 
	LOOP
	    DBMS_OUTPUT.PUT_LINE(to_char(i)||rpad('*',I,'*'));
	END LOOP;
END;

使用WHILE 循环向emp表连续插入5个记录。

SET SERVEROUTPUT ON
DECLARE
    v_count	NUMBER(2) := 1;
BEGIN
    WHILE v_count <6 LOOP
        INSERT INTO emp(empno, ename)
        VALUES (5000+v_count, '临时');
        v_count := v_count + 1;
    END LOOP;
    COMMIT;
END;

以上是关于Oracle --- PL/SQL的主要内容,如果未能解决你的问题,请参考以下文章

Oracle实战笔记(第七天)之PL/SQL进阶

oracle pl/sql 函数

Oracle PL/SQL 编程基础 实例 2

oracle--循环PL/SQL--demo1---

Oracle PL/SQL编程语法

Oracle PL/SQL块之函数