Oracle数据库的PLSQL
Posted Code_exploration
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle数据库的PLSQL相关的知识,希望对你有一定的参考价值。
PLSQL |
一:plsql是procedural language sql:过程化sql语言,是oracle数据库中可以实现一些复杂的计算和功能。
其实是在基本的sql语言中,加入了循环。判断等逻辑的一种数据库编程方式,运行在oracle数据库上。
二:作用
更高效率的的进行大数据量的运算。
三:优缺点
优点:效率高
缺点:编写与维护性低,开发测试效率低,非面向对象语言。
四:格式
基本格式:
declare
--变量的声明区域
最简格式:
/
begin
业务逻辑区域
--exception
end
/
说明:变量的声明
变量名 类型名:=值;
不赋值时,变量的默认值为null,作运算时,null与任何值运行的结果都是null。
==表示判断是否相等
*/*必须要存在
plsql只是一个定义好的匿名代码块,只能在oracle数据库中编译和运行一次,不会存储在oracle中,如果存储,需要定义成存储过程,函数,触发器。
五:练习
-->使用最简格式,输出打印"Hello plsql"。
set serveroutput on; --开启输出功能
begin
dbms_output.put_line(‘Hello plsql‘);
end;
/
-->显示 姓名 年龄 出生年月日
begin
dbms_output.put_line(‘lyr‘);
dbms_output.put_line(‘20‘);
dbms_output.put_line(‘1997-3-6‘);
end;
/
六:plsql的使用
1.-->注释,--单行注释,/*.....*/多行注释。
2.
declare
变量名 类型
变量名 类型:=值;
begin
end;
/
七:练习
-->定义一个a,b,c,a=5,b=6,c=a+b,输出c的值。
declare
a number:=5;
b number:=6;
c number;
begin
c:=a+b;
dbms_output.put_line(c)
end;
/
-->定义变量name,age,赋值输出。
declare
name varchar2(20);
age number(2);
begin
name:=‘lyr‘;
age:=20;
dbms_output.put_line(‘name=‘||name||‘ age=‘||age);
end;
/
判断 |
1:基本格式
if 条件 then
..
elsif 条件 then
..
else
..
end if;
2:练习
-->定义一个变量gender 赋值,如果为‘M‘,输出男,如果为‘F‘,输出女,否则输出性别不详。
declare
gender varchar(20);
begin
gender:=‘M‘;
if gender=‘M‘ then
dbms_output.put_line(‘男‘);
elsif gender=‘F‘ then
dbms_output.put_line(‘女‘);
else
dbms_output.put_line(‘性别不详‘);
end if;
end;
/
loop循环 |
1:基本格式
loop
循环内容
exit when 结束条件;
end loop;
2:练习
-->输出1-10。
declare
i number:=1;
begin
loop
dbms_output.put_line(i);
i:=i+1;
exit when i>10;
end loop;
end;
/
while循环 |
1:基本格式
while 条件 loop
业务逻辑
循环变量改变
end loop;
2:练习
-->使用while循环计算100以内奇数的和。
declare
i number:=1;
s number:=0;
begin
while i<101
loop
s:=s+i;
i:=i+2;
end loop;
dbms_output.put_line(s);
end;
/
for循环 |
1:基本格式
for 变量 in 集合 loop
end loop
说明:集合必须是数字集合,1..10表示1~10的整数。
2:练习
-->使用for循环输出1-10。
begin
for i in 1..10
loop
dbms_output.put_line(i);
end loop;
end;
/
PLSQL使用DML和TCL |
1:没有特殊情况,直接使用。
2:练习
--> 对表dept,增加一条数据 100,‘qqq‘,‘cc‘,修改40号部门的地址为南关。
begin
insert into dept values(100,‘qqq‘,‘cc‘);
update dept set loc=‘南关‘ where deptno=40;
end;
/
PLSQL使用DQL |
1:说明
plsql中使用DQL语言,不只是为了查询,因为如果查询的话,普通的sql语句比较方便,而plsql中使用DQL目的是将查询的数据封装到变量中,进行其他的逻辑运算。
--返回单行数据
select colName1,colName2 into 变量1,变量2 from ....
2:练习
查询10号部门的名称和地址封装到变量a和b进行拼接输出。
declare
a varchar2(20);
b varchar2(20);
begin
select dname,loc into a,b from dept where deptno=10;
dbms_output.put_line(a||‘ ‘||b);
end;
/
--返回多行数据
1:使用游标
会将多条数据封装到游标中,相当于java的ResultSet。
游标默认会在第一行,每fetch一次,游标就会向下行移动,当成功移到下一行时,游标就有一个状态:found,当游标移到最后一行时,再次fetch时,不会移动,但是状态变为not found。
2:格式
declare
cursor 游标名 is select 语句....;
变量 类型
begin
open 游标名;
loop
fetch 游标名 into 变量1,变量2...
exit when 结束条件(游标民%not found)
end loop;
close 游标名;
end;
/
3:练习
-->输出显示10号部门的员工姓名,职位,工资。
declare
cursor c is select ename,job,sal from emp where deptno=10;
na varchar2(20);
j varchar2(20);
sal number(20);
begin
open c;
fetch c into na,j,sal;
while (c%found)
loop
dbms_output.put_line(na||‘ ‘||j||‘ ‘||sal);
fetch c into na,j,sal;
end loop;
close c;
end;
/
--自己练习: set serveroutput on; declare begin dbms_output.put_line(‘dsada‘); end; / declare a number; b number; c number; begin a:=1; b:=2; c:=a+b; dbms_output.put_line(c); end; / declare i number; j number; begin i:=&请输入一个数字; j:=&请输入一个数字; dbms_output.put_line(i+j); end; / declare a number; b number; begin a:=&请输入一个数字; b:=&请输入一个数字; if a>b then dbms_output.put_line(‘a>b‘); elsif a<b then dbms_output.put_line(‘a<b‘); else dbms_output.put_line(‘a=b‘); end if; end; / declare i number; n number; begin i:=1; n:=&请输入一个数字; loop dbms_output.put_line(i); i:=i+1; exit when i>n; end loop; end; / declare i number; n number; s number; begin i:=1; n:=&请输入最大值N; s:=0; loop s:=s+i; i:=i+1; exit when i>n; end loop; dbms_output.put_line(s); end; / declare n number; i number; begin i:=1; n:=&请输入上限; while i<n loop dbms_output.put_line(i); i:=i+1; end loop; end; / declare i number; n number; begin i:=0; n:=&请输入一个数字; for i in 1..n loop dbms_output.put_line(i); end loop; end; / begin insert into dept values(90,‘qqq‘,‘cc‘); update dept set loc = ‘dasda‘; rollback; end; / select * from dept; declare a varchar2(20); b varchar2(20); begin select dname,loc into a,b from dept where deptno =10; dbms_output.put_line(a||‘ ‘ ||b); end; / declare a dept.dname%type; b dept.loc%type; begin select dname,loc into a,b from dept where deptno=10; dbms_output.put_line(a||‘ ‘||b); end; / declare cursor c is select ename,sal,empno from emp where deptno=10; na varchar2(20); sa number(20); emp number(20); begin open c; fetch c into na,sa,emp; while (c%found) loop dbms_output.put_line(na||‘ ‘||sa||‘ ‘||emp); fetch c into na,sa,emp; end loop; close c; end; / declare cursor c is select ename,job,sal from emp where deptno=10; na varchar2(50); j varchar2(50); sal number(10); begin open c; fetch c into na,j,sal; while(c%found) loop dbms_output.put_line(na||‘ ‘||j||‘ ‘||sal); fetch c into na,j,sal; end loop; close c; end; / declare cursor c is select ename,sal,mgr from emp; name varchar2(74); sal number; mgr number; begin open c; fetch c into name,sal,mgr; while c%found loop dbms_output.put_line(name||‘ ‘||sal||‘ ‘||mgr); fetch c into name,sal,mgr; end loop; close c; end; / declare cursor c is select deptno from dept; d number; begin open c; fetch c into d; loop dbms_output.put_line(d); fetch c into d; exit when c%notfound; end loop; end; / declare cursor c is select ename from emp;zz name varchar2(50);; begin open c; dbms_output.put_line(c%notfound); fetch c into name; while c%found loop dbms_output.put_line(name); fetch c into name; end loop; close c; end; /
---恢复内容结束---
以上是关于Oracle数据库的PLSQL的主要内容,如果未能解决你的问题,请参考以下文章
oracle中plsql与sqlplus的区别是啥啊?它们分别用来做啥啊?