Oracle数据库——PLSQL和存储过程、触发器、oracleSQL优化方案

一、PLSQL

1.SQL99是什么
1)是操作所有关系型数据库的规则
2)第四代语言
3)是一种结构化查询语言
4)只需发出合法合理的命令,就有对应的结果显示
2.SQL特点
1)交互性强,非过程化
2)数据库操纵能力强,只需发送命令,无须关注如何实现
3)容易调试,错误提示,直接了当
4)SQL强调结果
3.PLSQL是什么
是专用于Oracle服务器,在SQL基础上,添加一些过程化控制语句,叫PLSQL
过程化包括:类型定义,判断,循环,游标,例外(异常)处理...
PLSQL强调过程
4.为什么用PLSQL
因为SQL第四代命令式语言,无法显示处理过程化的业务,所以得用过程化程序设计语言弥补SQL不足之处
SQL和PLSQL不是替代关系,而是弥补关系
5.PLSQL程序的完整组成结构
[declare]
	变量声明;
变量声明;
BEGIN
	DML/TCL操作;
DML/TCL操作;
[exception]
	例外处理;
例外处理;
END;
/
注意:在PLSQL程序中,;代表每条语句的结束,/表示整个PLSQL程序结束
6.PLSQL与SQL执行有什么不同
1)SQL是单条执行;
2)PLSQL是整体执行,不能单条执行,整个PLSQL结束用/,其中每条语句结束用;。
例子
--输出7369号员工姓名和工资,格式如下:7369号员工的姓名是XXX,薪水是XXX,语法:使用表名.字段名%type
DECLARE pname emp.ENAME%TYPE;
				psal EMP.ENAME%TYPE;
BEGIN SELECT ENAME, SAL INTO pname , psal FROM EMP WHERE EMPNO = 7369;
	dbms_output.put_line('7369号员工是:'||pname||'薪资是:'||psal);
END;
/
--第二种方法
DECLARE
EMP_abc EMP%rowtype;
BEGIN
SELECT * INTO EMP_abc FROM EMP WHERE EMPNO = 7369;
dbms_output.put_line('7369号员工是:'||EMP_abc.ENAME||'薪资是:'||EMP_abc.SAL);
END;
/
-- 输出hello world!!!
BEGIN
dbms_output.put_line('hello world!!!');
END;
/
-- 求10+100的和,要求:需要声明变量
DECLARE
	--声明三个变量
	i1 NUMBER := 10;  --声明变量i1保存10;变量的声明不能用=需要加个:才行(即:=为等于)
	i2 NUMBER := 100;  --声明变量i2保存100;
	sum_i NUMBER;       --声明变量sum_i为两数相加的和,没有初始值
BEGIN
	--计算即可
	sum_i := i1 + i2;
	dbms_output.put_line('10+100的和为:' || sum_i);
END;
/
7.判断

语法:
IF 变量 IN
THEN
ELSE
END IF;

--plsql中的判断
--使用if-else-end   if显示今天星期几,是工作日还是休息日,周一至周五是工作日,周六周日休息日

DECLARE
	to_day VARCHAR2(11) ;  --声明变量保存是星期几;
BEGIN
	--查询今天是星期几,首先查询今天的日期,在截取'day'
	SELECT TO_CHAR(SYSDATE,'day') INTO to_day FROM dual;
	--判断to_day是星期几
	IF to_day IN('星期六','星期日')
	THEN
	dbms_output.put_line(to_day||'休息日');
	ELSE
	dbms_output.put_line(to_day||'工作日');
	END IF;
END;
/
--从键盘接收值,使用if-elsif-else-end   if显示条件(这里条件是"age<16","age<30","age<60","age<80")
DECLARE
	age NUMBER(10) := &年龄;  --定义一个年龄是键盘输入(这里不能用,需要黑窗口)
BEGIN
	IF age <18 THEN
	dbms_output.put_line('未成年');
	ELSIF age <65 THEN
	dbms_output.put_line('青年人');
	ELSIF age <90 THEN
	dbms_output.put_line('老年人');
	ELSE 
	dbms_output.put_line('老而长寿');
	END IF;
END;
/
8.循环

有三种循环方式:loop 、while、for

--使用loop计算前100的和
DECLARE
	i1 NUMBER(4) :=1;
	sum_i NUMBER(4) :=0;
BEGIN
	LOOP
	--累加
	sum_i := i1 + sum_i;
		--循环变量自增
	i1 := i1 + 1;
	--当变量==101时候退出
	exit 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值