?
|
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,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,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,emp;
end loop;
close c;
end;
/
declare
cursor c is select ename,sal from emp where deptno=10;
na varchar2(50);
j varchar2(50);
sal number(10);
begin
open c;
fetch c into na,sal;
while(c%found) loop
dbms_output.put_line(na||‘ ‘||j||‘ ‘||sal);
fetch c into na,sal;
end loop;
close c;
end;
/
declare
cursor c is select ename,mgr from emp;
name varchar2(74);
sal number;
mgr number;
begin
open c;
fetch c into name,mgr;
while c%found loop
dbms_output.put_line(name||‘ ‘||sal||‘ ‘||mgr);
fetch c into name,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;
/
练习
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
---恢复内容结束---
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!