PL/SQL程序
一.定义
declare
说明部分
begin
语句序列(DML语句)
exception
例外处理语句
end;
二. 变量和常量说明
a) 说明变量(char,varchar2,date,number,boolean,long)
varl char(15);
married boolean :=true;
psal number(7,2);
my_name emp.ename%type;引用型变量,即my_name的类型与emp表中的ename列的类型一样
emp_rec emp%rowtype;记录型变量(一行的类型,是一个数组)
b) 记录变量分量的引用:
emp_rec.ename := ‘adams’;(数组中的某一列)
例子:
declare
--定义记录型变量:代表一行
emp_rec emp%rowtype;
begin
select * into emp_rec from emp where empno=7839;
dbms_output.put_line(emp_rec.ename ||’的薪水是’||emp_rec.sal);
end;
c)定义常量 加个关键字
varl constant char(15);
三. IF语句
1.
IF 条件 THEN 语句1;
语句2
END IF;
2.
IF 条件THEN 语句序列1;
ELSE 语句序列2;
END IF;
3.
IF 条件 THEN 语句;
ELSIF 语句 THEN 语句;
ELSE 语句;
END IF;
if 条件 then 语句
elsif 条件 then 语句
elsif 条件 then 语句
四. 循环语句
1. WHILE循环
while total <=25000
loop
…..
total :=total + salary;
end loop;
2. for in 循环
FOR xxx IN 1..3
LOOP
语句序列;
END LOOP;
例子:
--打印1~10
set serveroutput on ;
declare
pnum number := 1;
begin
loop
--退出条件
exit when pnum > 10;
DBMS_OUTPUT.PUT_LINE(pnum);
-- 加1
pnum := pnum + 1;
end loop;
end;
五.光标
--查询并打印员工的姓名和薪水
/*
光标的属性:
%isopen %rowcount (影响的行数)
%found %notfound
默认,一个会话中只能打开300个光标
SQL> show parameter cursor
NAME TYPE VALUE
cursor_sharing string FORCE
cursor_space_for_time boolean FALSE
open_cursors integer 300
session_cached_cursors integer 20
修改: alter system set open_cursors=400;
*/
set serveroutput on
declare
--定义光标
cursor cemp is select ename,sal from emp;
pename emp.ename%type;
psal emp.sal%type;
begin
--打开光标
open cemp;
loop
--取一条记录
fetch cemp into pename,psal;
--退出条件
--exit when 没有取到记录;
exit when cemp%notfound;
dbms\_output.put\_line(pename||'的薪水是'||psal);
end loop;
--关闭光标
close cemp;
end;
涨工资例子:
--涨工资,总裁1000 经理800 其他400
set serveroutput on
declare
--alter table "SCOTT"."EMP" rename column "JOB" to empjob
cursor cemp is select empno,empjob from emp;
pempno emp.empno%type;
pjob emp.empjob%type;
begin
rollback;
open cemp;
loop
--取一条记录
fetch cemp into pempno,pjob;
exit when cemp%notfound;
--判断职位
if pjob = 'PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;
elsif pjob = 'MANAGER' then update emp set sal=sal+800 where empno=pempno;
else update emp set sal=sal+400 where empno=pempno;
end if;
end loop;
close cemp;
--why? ---> ACID
commit;
dbms_output.put_line('完成');
end;
手机扫一扫
移动阅读更方便
你可能感兴趣的文章