PL/SQL基础(Oracle--11g) 一(基础和控制语句)

本文章讲解PL/SQL的基础学习



一、PL/SQL是什么?

           PL/SQL(Procedural Langage/SQL,也称过程语言/SQL)是Oracle过程语言和机构化查询语言的一种扩展增强语言,使得PL/SQL可以编写高级的功能。

    1.)PL/SQL的体系结构

在这里插入图片描述
       1.PL/SQL引擎用来编译和执行PL/SQL块或子程序,此引擎驻留在Oracle服务器中。PL/SQL仅执行过程语言。
       2.PL/SQL块是一种块结构语言,它将一组语句放在一个块内,PL/SQL块将逻辑上相关的声明和语句组合在一起。
        一个PL/SQL块由三部分,声明,执行,异常部分。

--------------------------------------------------------------------
[DECLARE]
	--声明部分:PL/SQL的变量,类型和游标,以及局部的存储过程和函数
BEGIN
	--执行部分:过程及SQL语句,主要部分
[EXCEPTION]
	--异常部分,错误处理
END;

常量和变量的声明

--Oracle11g新特性,可以使用PL/SQL块中的赋值语句范围控制
	v_no :=emp_seq.nextval;
--变量常量的声明
	var_name data_type[(size)] [:=init_value]
	--var_name	变量的名称
	--data_type	数据类型
	--size		变量的范围
	--init_value 变量的初始化值
--声明规范
	--标识符名不能超过30个字符
	--第一个字符必须是字母
	--不区分大小写
	--不能用- 减号
	--不能是SQL关键字

变量名规范

标识符命名规则示例
程序变量v_namev_student
程序常量c_namec_company
游标变量cursor_namecursor_emp
异常标志e_namee_too_many
表类型name_table_typeemp_record_type
name_tableemp_table
记录类型name_recordemp_record
绑定变量g_nameg_year_sal

二、PL/SQL控制语句

1.条件控制IF语句,CASE语句

	IF <布尔表达式> THEN 
		PL/SQLSQL语句
	END IF;

--带ELSE的
	IF <布尔表达式> THEN 
		PL/SQLSQL语句
	ELSE 
	--其他语句
	END IF;

--带ELSIF的
	IF <布尔表达式> THEN 
		PL/SQLSQL语句
	ELSIF  <布尔表达式> THEN 
		--其他语句
	ELSE
		--其他语句
	END IF;
----------------------------------CASE语句--------------------------------------------------
	CASE 条件表达式
		WHEN 条件表达式结果1 THEN
			--语句段1
		WHEN 条件表达式结果2 THEN
			--语句段2
		...
		WHEN 条件表达式结果n THEN
			--语句段n
		 [ELSE 语句段]
	END CASE;
-----------------------------------第二种写法-----------------------------------------------
	CASE 
		WHEN 条件表达式结果1 THEN
			--语句段1
		WHEN 条件表达式结果2 THEN
			--语句段2
		...
		WHEN 条件表达式结果n THEN
			--语句段n
		 [ELSE 语句段]
	END CASE;

2.循环控制

用于重复执行一系类语句,循环控制包括LOOP循环,WHILE循环,FOR循环

--1.LOOP循环
LOOP
	--要执行的语句
	EXIT WHEN <条件语句> --满足退出循环
END LOOP;
--示例
		DECLARE 
		   x number(4) := 100; 		--每次加100;
		   v_sal employee.sal%type; --属性类型变量;
		BEGIN 
		  SELECT sal INTO v_sal FROM employee WHERE ename='SCOTT';	
		   LOOP 
		      dbms_output.put_line('现在的工资是'||v_sal); 
		           UPDATE employee
		           SET sal=sal+x			--每次执行循环就更改语句+100
		           WHERE ename='SCOTT';
		       SELECT sal INTO v_sal FROM employee WHERE ename='SCOTT';
		      IF v_sal >=10000  THEN 		--加到10000时条件满足退出循环
		         exit; 
		      END IF; 
		   END LOOP; 
		END;

--2.WHILE循环
WHILE <布尔表达式> LOOP
	--要执行的语句;
END LOOP;
--示例
		DECLARE 
		   v_log number(2) := 10; 	--初始值10
		BEGIN 
		   WHILE v_log < 20 LOOP 	--小于20 满足就执行循环 FLG
		      dbms_output.put_line(x); 	
		      v_log := v_log + 1; 	--每次加1 在返回到FLG判断
		   END LOOP; 
		END;
--3.FOR
FOR 循环计数器 IN [ REVERSE ] 下限...上限 LOOP
		要执行的语句
END LOOP;
--示例
		DECLARE 
		   v_log number(2); 
		BEGIN 
		   FOR v_log IN 7 .. 21 LOOP 
		      dbms_output.put_line(x); 
		  END LOOP; 
		END; 

输出结果:
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

3.顺序控制

用于按照自己想要的顺序执行,包括NULL,GOTO语句(在此不示例)
NULL语句是一个可执行的语句,相当于一个占位符或不执行任何操作的空语句

--要求,显示变量v_count的值,如果小于10,则增加10在显示v_count的值
DECLARE
	v_count NUMBER :=1;
BEGIN
	dbms_output.put_line('v_count当前的值是:'||v_count);
	IF v_count>=10 THEN
		NULL;	
	ELSE 
		v_count :=v_count + 10 ;
		dbms_output.put_line('v_count+10后的值是:'||v_count);
	END IF;
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值