PL/SQL简单学习
1.PL/SQL块的组成部分:
① 声明部分:该部分包含了变量和常量的定义,以及变量和常量的初始值定义,这部分由关键字declare开始,如果PL/SQL块中不需要声明变量或常量,该部分可以省略。
② 执行部分:执行部分是PL/SQL的执行指定部分,由关键字begin开始,关键字end结尾。
所有可执行的SQL都放在这一部分,该部分不能省略,end关键字后面使用分号结尾。
③ 异常处理部分:该部分是可选的,该部分使用exception关键字将可执行部分分为两个部分,
一部分是正常运行的程序,一旦出现异常就跳转到异常部分执行。
2.PL/SQL中符号的声明:
① := → 赋值运算符;
-- → 单行注释;
.. → 范围操作符;eg.1..5 → 表示1到5
|| → 字符串连接 ;
/* */ → 多行注释;
② 算术运算符: + , - , * , / , **(求幂运算,eg. 3**2=9)
③ 关系运算符: > , < , >= , <= , <> , !=
④ 逻辑运算符: and , or , not
3.变量的声明:
eg.
declare name nvarchar2(20) := 'hanchao';
-- nvarchar(20)→数据类型;name→变量名;‘hanchao'变量的默认值;
begin
dbms_output.put_line(name);
-- 用于将变量输出到控制台上,如果没有输出可以通过set serveroutput on 设置输出。
end;
/ -- 用于执行上面的语句。
4.变量的赋值:
① :=
② select ... into 变量名 from ...
[注意事项:查询结果只能是一行,如果是多行或没有行,则会引发异常]
eg.
declare num1 int;
begin
num1 := 10;
select 1 into num1 from dual;
dbms_output.put_line(num1);
end;
/
5.声明常量:通过constant关键字来声明常量
declare pi constant float := 3.14;
r int := 4;
area float;
begin
area := pi * r * r;
dbms_output.put_line('area: ' || area);
end;
/
6.特殊数据类型:
① %ROWTYPE : 该数据类型表示一条记录,相当于java中的一个对象,可以通过 “.”(点)操作符访问记录中的属性。
eg.
declare emprow emp%rowtype ;-- emp为表名
begin
select * into emprow from emp where empno = 7934;
dbms_output.put_line(emprow.ename);
end;
/
②%TYPE : 引用某个变量或数据库的列作为数据类型来声明一个变量。
eg.
declare myname emp.ename%type; -- 以表emp的ename列为数据类型
begin
select ename into myname from emp where empno = 7934;
dbms_output.put_line(myname);
end;
/
7.条件分支语句:
declare value1 number(10) := 10;
begin
if value1 > 10 then
dbms_output.put_line(' > 10');
elsif value1 = 10 then
dbms_output.put_line(' = 10 ');
else
dbms_output.put_line('< 10') ;
end if;
end;
/
8.循环结构
①loop ... end loop 循环
eg1.
declare temp number(3) := 0;
total number(5) := 0;
begin
loop
temp := temp + 1;
total := total + temp;
if temp >= 100 then
exit;
end if;
end loop;
dbms_output.put_line('total: ' || to_char(total));
end;
/
eg2.
declare temp number(3) := 0;
total number(5) := 0;
begin
loop
temp := temp + 1;
total := total + temp;
exit when temp >= 100;
end loop;
dbms_output.put_line('total : ' || to_char(total));
end;
/
②while 循环
declare temp number(3) := 0;
total number(5) := 0;
begin
while temp < 100
loop
temp := temp + 1;
total := total + temp;
end loop;
dbms_output.put_line('total : ' || to_char(total));
end;
/
③for循环
declare temp number(3) := 0;
total number(5) := 0;
begin
for temp in 0..100
loop
total := total + temp;
end loop;
dbms_output.put_line(' total : '|| to_char(total));
end;
/