作为数据库补课或缺的一部分,PL/SQL有着很大的作用,还是以后的过程,触发器等等的基础,所以可以看的出来PL/SQL的重要,闲话少说,上干货。
PL/SQL的主要格式为:
declare(必写)
要声明的变量名 变量类型;
要声明的变量名 变量类型;
……
要声明的变量名 变量类型;
begin(必写)
要执行的内容
exception(可选)
要捕获的异常信息
end;(必写)
为了更好的理解,我做了一个不恰当的类比(java语言),希望对您有所帮助
其中 “要声明的变量” 可和 int a,b;等类似,都是声明或定义出来,用作以后的使用
”要执行的内容“ 可和 system.out.pringtln(a+b);类似,但是我这只是一个类比,并不是完全相同,而这里的内容当然和对数据库的操作有关,而且不仅仅一个输出。
记住:不要忘了,在写PL/SQL编程前,先写出,set serveroutput on;语句,如果不写的话,你的输出语句,将不会在控制台输出任何语句。
- 首先,咱们先从声明变量说起:
变量类型:
(1) 和普通的数据库类型相同,例如:i number; 即声明了一个number类型的变量i
(2) 复制单行类型(记录变量) ,例如:v_empno emp.empno%type; 即声明了一个和emp表中的empno类型一致的变量v_empno
(3) 复制多行类型(记录变量),例如v_emp_record emp%rowtype; 即声明了一个和emp表中所有列类型一致的变量,你们可以把它想象成和emp相同的一个伪表,在声明时,此刻为空表,在以后的使用中,可直接使用“点”来调用不同的列名,实现调用。
(4)特殊类型,这个是在建表等多数不会用到的类型,比较多,例如:游标,异常等,这就不细说了,声明方法同(1),只不过这类类型,大多在声明后还要做完善。
注意1:为了定义的变量更加美观,而且可读性更高,定义变量也存有一定的内容规范:
注意2:普通的数据库类型的变量和复制了单行类型的变量 可用“:=”进行赋初值。例:i number:=4;另外,一些可用的运算符在下表,就不一一演示了:
2. 接下来就是“要执行的内容”
(1)条件结构:
<1>if语句
if 条件 then
该条件下,想进行的操作
end if;
例:declare
i number:=2;
begin
if i=2 then
dbms_output.put_line('if语句演示,条件符合');
end if;
end;
这个是本篇博客中第一个完整的代码,下面解释一下:此段代码声明了一个变量i并赋初值2,判断i是否为2,若是,输出“if语句演示,条件符合”,在这里就想拓展一下,在sql里字符串的拼接,是使用“||”,而非“+”哦!!
<2> if……else语句
if 条件 then
该条件下,想进行的操作
else
其他情况要执行的操作
end if;
例:declare
i number:=2;
begin
if i=1 then
dbms_output.put_line('if……else语句演示,条件符合');
else
dbms_output.put_line('if…… else语句演示,条件不符合');
end if;
end;
这个代码不想太多解释,和上个代码都是类似的,大家主要看这些格式,以后有新的知识存在我再解释,不浪费自己新买的键盘了,望见谅!!
<3> if …… elsif …… elsif ………… else 语句
if 条件 then
该条件下,想进行的操作
elsif 条件 then
该条件下,想进行的操作
elsif 条件 then
该条件下,想进行的操作
elsif 条件 then
该条件下,想进行的操作
………………
else
其他情况要执行的操作
end if;
注意:此刻的elsif 和Java中的else if是有区别的,不要混淆呦!
例:declare
i number:=2;
begin
if i=1 then
dbms_output.put_line('if……else if语句演示,条件1符合');
elsif i=2 then
dbms_output.put_line('if…… else if语句演示,条件2不符合');
else
dbms_output.put_line('if…… else if语句演示,条件不符合');
end if;
end;
<4>case语句
case 要作为条件的变量等(可选)
when 条件表达式1 then
该条件下,想执行的语句
when 条件表达式1 then
该条件下,想执行的语句
……………………
else
其他条件下,想执行的语句
end case;
例子1:
declare
i number:=2;
begin
case i
when 1 then dbms_output.put_line('if……else if语句演示,条件1符合');
when 2 then dbms_output.put_line('if…… else if语句演示,条件2不符合');
else dbms_output.put_line('if…… else if语句演示,条件不符合');
end case;
end;
例子2:
declare
i number:=2;
begin
case
when i=1 then dbms_output.put_line('if……else if语句演示,条件1符合');
when i=2 then dbms_output.put_line('if…… else if语句演示,条件2不符合');
else dbms_output.put_line('if…… else if语句演示,条件不符合');
end case;
end;
注意:这两个代码,功能相同,结构类似,但是表达式条件在写法上稍有不同,你可以看看你喜欢用那种。
(2)循环结构
<1>简单循环 loop……end loop;
loop
循环执行的语句
exit when 循环结束条件
循环条件更改
end loop;
例子:declare
i number:=0;
begin
loop
dbms_output.put_line(i);
exit when i=10;
i:=i+1;
end loop;
end;
<2>while…… loop 语句
while 条件结束语句 loop
循环执行的语句
循环条件更改
end loop;
例子:declare
i number:=0;
begin
while i<10 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
<3>for 语句
for 循环变量 in 区域范围 loop
循环执行的语句
end loop;
例子:declare
begin
for i in 0 .. 10 loop
dbms_output.put_line(i);
end loop;
end;
由我写的三个循环结构的代码,实现了基本相同的功能,但是明显看出来for语句是更加简洁,明了,但是这就说明for语句更好用吗?这不尽然,三条语句的偏重点是不一样的,for语句对顺序执行的循环有着得天独厚的优势,但若只有一个条件,那么while循环又比for循环更加舒服,其实大多数的循环是三者都可以表达出来的,但是哪一个循环更加的便捷,就靠你来发现了。
另外,循环嵌套,你若是学习过C语言或Java语言,相信难不倒你,这里就不过多的进行啰嗦了。
这里要说一下循环跳转:
exit-------退出当前所在循环的所有循环
这句话,很拗口,这是考虑了循环嵌套的原因,如果仅仅只有一个循环则,直接跳出循环,进行下面的语句执行。
goto 无条件跳转 常常和"<<>>"配合使用
例如:
<<c>> i:=i+1;
if i=3 then
goto c;
end if;
这只是一个小小的演示,并没有太完善,大家进行参考
- 讲到这里,就该讲到异常处理,但是里面内容居多,而且本篇博客又很冗长,所以做了一个新的博客。