微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Oracle】PL/SQL——基本语法,记录类型和控制流程

基本语法

PL/sql的基本语法分为三个部分,分别是:声明,执行,执行异常。

--将打印功能打开,不然输出结果无法看到
SET SERVEROUTPUT ON

DECLARE 
--声明部分 :  在此声明 PL/sql 用到的变量,类型及游标,以及局部的存储过程和函数

BEGIN
--执行部分 : 过程及 sql  语句,即程序的主要部分
	
EXCEPTION
--执行异常部分 :  错误处理
	
END  

记录类型

记录类型就类似于Java中的一个实体类,定义之后我们可以通过调用实体类名来操作各种变量

DECLARE 
  --声明一个记录类型
  TYPE EMP_RECORD IS RECORD(
	     V_SAL EMPLOYEES.SALARY%TYPE,V_EMAIL EMPLOYEES.EMAIL%TYPE,V_HIRE_DATE EMPLOYEES.HIRE_DATE%TYPE
	);
  --定义一个记录类型的成员变量
  V_EMP_RECORD EMP_RECORD;
BEGIN
	SELECT E.SALARY,E.EMAIL,E.HIRE_DATE INTO V_EMP_RECORD FROM EMPLOYEES E WHERE E.EMPLOYEE_ID = 100;
	--打印语句
	DBMS_OUTPUT.put_line(V_EMP_RECORD.V_SAL||','||V_EMP_RECORD.V_EMAIL||','||V_EMP_RECORD.V_HIRE_DATE);

END;  
/

其中,

%TYPE:定义一个变量,其数据类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。

使用%TYPE 特性的优点在于:

所引用的数据库列的数据类型可以不必知道;

所引用的数据库列的数据类型可以实时改变。

%rOWTYPE :返回一个记录类型,其数据类型和数据库表的数据结构相一致。

使用%rOWTYPE 特性的优点在于:

所引用的数据库中列的个数和数据类型可以不必知道;

所引用的数据库中列的个数和数据类型可以实时改变。

SET SERVEROUTPUT ON

DECLARE
  V_EMP EMPLOYEES%rOWTYPE;
BEGIN
	SELECT * INTO V_EMP FROM EMPLOYEES E WHERE E.EMPLOYEE_ID = 100;
	
	DBMS_OUTPUT.put_line(V_EMP.EMPLOYEE_ID || '--' || V_EMP.LAST_NAME || ':' || V_EMP.SALARY);
	
END;  
/

控制流程

条件语句:

IF语句:

IF <布尔表达式> THEN
PL/sqlsql 语句;
ELSIF < 其它布尔表达式> THEN
其它语句;
ELSIF < 其它布尔表达式> THEN
其它语句;
ELSE
其它语句;
END IF;

CASE语句:

CASE selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
WHEN expressionN THEN resultN
[ ELSE resultN+1]
END;

需要注意的是,CASE语句中的when条件只能是单个字符串类型的数据。

DECLARE
	V_grade char(1) ;
	V_appraisal VARCHAR2(20);
BEGIN
	V_appraisal :=
	CASE v_grade
		WHEN ‘A’ THEN ‘Excellent’
		WHEN ‘B’ THEN ‘Very Good’
		WHEN ‘C’ THEN ‘Good’
		ELSE ‘No such grade’
	END;
	DBMS_OUTPUT.PUT_LINE(‘Grade:‘||v_grade||’ Appraisal: ‘|| v_appraisal);
END;

循环语句

简单循环

LOOP
要执行的语句;
EXIT WHEN <条件语句> ; /*条件满足,退出循环语句*/
END LOOP;

WHILE 循环( 相较 1 ,推荐使用 2)

WHILE <布尔表达式> LOOP
要执行的语句;
END LOOP;

数字式循环

FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
要执行的语句;
END LOOP;

注:每循环一次,循环变量自动加 1;使用关键字 REVERSE,循环变量自动减 1。

跟在 IN REVERSE 后面的数字必须是从小到大的顺序, 而且必须是整数,不能是变量或表达式。可以使用 EXIT 退出循环。

其中,

标号和 GOTO:

PL/sql 中 GOTO 语句是无条件跳转到指定的标号去的意思。语法如下:

GOTO label; . . . . . . <<label>> /*标号是用<< >>括起来的标识符 */

原文地址:https://www.jb51.cc/oracle/209645.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐