一、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