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的主要内容,如果未能解决你的问题,请参考以下文章