20201204 王维
学习总结
PL/SQL块
1 变量声明
变量名 数据类型[ :=初始值];
PL/SQL支持SQL中的数据类型,PL/SQL中正常支持NUMBER,VARCHAR2,DATE等Oracle SQL数据 类型。声明变量必须指明变量的数据类型,也可以声明变量时对变量初始化,变量声明必须在声明部 分。
2 声明常量
declare
pi constant number := 3.14;
r number := 5;
area number;
begin
area := power(r , 2) * pi;
dbms_output.put_line('圆的面积是:' || area);
end;
常量在声明时赋予初值,并且在运行时不允许重新赋值。使用CONSTANT关键字声明常量。 声明常量时使用关键字CONSTANT,常量初值可以使用赋值运算符(:=)赋值,也可以使用 DEFAULT关键字赋值。
dbms_output.put_line是输出语句,可以把一个变量的值输出,在SQLPlus中输出数据时,可能没 有结果显示,可以使用命令: set serveroutput on 设置输出到SQLPlus控制台上。
3 属性数据类型
declare
emp_scott emp%rowtype;
begin
select * into emp_scott from emp where empno = 7788;
dbms_output.put_line('emp_scott.ename = ' || emp_scott.ename);
end;
declare
sal emp.sal%type;
mysal number(4):=3000;
totalsal mysal%type;
begin
select sal into sal from emp where empno = 7934;
totalsal := sal + mysal;
dbms_output.put_line(totalsal);
end;
当声明一个变量的值是数据库中的一行或者是数据库中某列时,可以直接使用属性类型来声明。Oracle 中存在两种属性类型:%TYPE和%ROWTYPE。
% ROWTYPE 引用数据库表中的一行作为数据类型,即RECORD类型(记录类型),是PL/SQL附加的数据类 型。表示一条记录,就相当于Java中的一个对象。可以使用“.”来访问记录中的属性。
%TYPE 引用某个变量或者数据库的列的类型作为某变量的数据类型。
4 CASE
declare
v_grade char(1) := upper('&p_grade');
begin
case v_grade
when 'A' then
dbms_output.put_line('Excellent');
when 'B' then
dbms_output.put_line('vary Good');
when 'C' then
dbms_output.put_line('Good');
else
dbms_output.put_line('No such grade');
end case;
end;
declare
v_grade char(1) := upper('&grade');
p_grade varchar2(20);
begin
p_grade :=
case v_grade
when 'A' then
'Excellent'
when 'B' then
'Very Good'
when 'C' then
'Good'
else
'No such grade'
end;
dbms_output.put_line('Grade:' || v_grade || ', the result is ' || p_grade);
end;
declare
v_grade char(1) := upper('&grade');
p_grade varchar2(20);
begin
p_grade :=
case
when v_grade = 'A' then
'Excellent'
when v_grade = 'B' then
'Very Good'
when v_grade = 'C' then
'Good'
else
'No such grade'
end;
dbms_output.put_line('Grade:' || v_grade || ', the result is ' || p_grade);
end;
CASE是一种选择结构的控制语句,可以根据条件从多个执行分支中选择相应的执行动作。也可以作为 表达式使用,返回一个值。类似于Java中的switch语句。
& grade表示在运行时由键盘输入字符串到grade变量中。
v_grade分别于WHEN后面的值匹配,如果成功就执行WHEN后的程序序列。
CASE语句还可以作为表达式使用,返回一个值,注意此时的end case
变为了end
PL/SQL还提供了搜索CASE语句。也就是说,不使用CASE中的选择器,直接在WHEN后面判断条件,第 一个条件为真时,执行对应THEN后面的语句序列。
5 游标 Cursor
declare
cursor empdate is select * from emp;
emp_row emp%rowtype;
begin
open empdate;
loop
fetch empdate into emp_row;
exit when empdate%notfound;
emp_row.sal := emp_row.sal +
case emp_row.job
when 'PRESIDENT' then
1000
when 'MANAGER' then
800
else
400
end;
update emp set sal = emp_row.sal where empno = emp_row.empno;
commit;
end loop;
close empdate;
end;
在写 java 程序中有集合的概念,那么在 pl/sql 中也会用到多条记录,这时候我们就要用到游标,游标 可以存储查询返回的多条数据。
CURSOR 游标名 [ (参数名 数据类型,参数名 数据类型,...)] IS SELECT 语句;
游标的使用步骤:
- 打开游标: open c1; (打开游标执行查询)
- 取一行游标的值:fetch c1 into pjob; (取一行到变量中)
- 关闭游标: close c1;(关闭游标释放资源)
- 游标的结束方式 exit when c1%notfound
心得体会
今天学习了Oracle的高级特性,对mysql的内容进行了一定的学习,还学习了plsql语句,很多语法结构类似于java的语法,但是不同的地方还是要多多注意。
近期评论