第一个PL/SQL程序
--打开输出开关
set serveroutput on
/
declare
--说明部分(变量,光标或者例外)
begin
--程序体
dbms_output.put_line(‘Helllo World’);
end;
/
dbms_output:程序包
--查看程序包的结构
desc dbms_output
PL/SQL简介
PL/SQL(Procedure language/SQL)
PLSQL是Oraclr对sql语言的过程化扩展
--指在SQL命令语言中增加过程处理语句(如分子支、循环等),是SQL语言具有过程处理能力。
不通过数据库的SQL扩展不同:
Oracle:PL/SQL
DB2:SQL/PL
SQL Server:Transac-SQL(T-SQL)
PL/SQL的程序结构
declare
说明部分(变量说明、光标申明。例外说明)
begin
语句序列(DML语句)
exception
例外处理语句
end;
/
定义基本变量
类型:char,varchar2,date,number,Boolean,long
举例:
var1 char(15);
married Boolean :=true;
psal number(7,2);
引用型变量
举例:
--my_name:变量名,emp:表名,ename:表里面的字段名
--把该字段类型作为该变量的类型,该字段类型改变,引用的类型也会跟着改变。
my_name emp.ename%type;
set serveroutput on
declare
--定义引用型变量:查询并打印7839的姓名和薪水
--pename emp.ename%type;
--psal emp.sal%type;
begin
--得到7839的姓名和薪水
select ename,sal into pename,psal from emp where empno=7839;
--打印姓名和薪水
dbms_output.put_line(pename||’的薪水是’||psal);
end;
/
记录型变量
举例:
--emp_res:变量名,emp:表名
-- 取表中一行的类型作为变量的类型,可以把记录型变量理解为一个数组,数组中的每一个元素代表表中的每一列。
emp_res emp%rowtype;
记录型变量的引用
emp_res.ename :=’ADAMS’;
例:
set serveroutput on
declare
--定义记录型变量:代表一行
emp_rec emp%rowtype;
begin
--得到7839一行的信息
select * into emp_rec from emp where empno=7839;
--打印姓名和薪水
dbms_output.put_line(emp_rec.ename||’的薪水是’||emp+rec.sal);
end;
/
IF语句
- IF 条件 THEN 语句1;
语句2;
END IF;
- IF 条件 THEN 语句序列1;
ELSE 语句序列2;
END IF;
- IF 条件 THEN 语句;
ELSIF 语句 THEN 语句;
ELSE 语句;
EDN IF;
IF语句案例
/*
判断用户从键盘输入的数字
- 如何使用if语句
- 接收一个键盘输入(键盘输入的都是字符串)
*/
select serveroutput on
--num:地址值,含义是:在该地址上保存了输入的值
accept num prompt ‘请输入一个数字’;
declare
--定义变量保存用户从键盘输入的数字
pnum number:=#
begin
--执行if语句进行条件判断
if pnum=0 then dbms_output.output_line(‘您输入的数字是0’);
elsif pnum =1 then dbms_output.output_line(‘您输入的数字是1’);
elsif pnum=2 then dbms_output.output_line(‘您输入的数字是2’);
else dbms_output.put_line(‘其他数字’);
end if;
end;
/
循环语句
1、
WHILE total <=25000 LOOP
…
total:=total+sa;ary
END LOOP;
例:
--使用while循环打印数字1-10
set serveroutput on
declare
--定义循环变量
pnum number:=1;
begin
while pnum<=10 loop
--循环体
dbms_output.put_line(pnum);
--使该变量+1
pnum:=pnum+1;
end loop;
end;
/
2、
Loop
EXIT[when 条件]
……
End loop;
例;
--使用loop循环打印1-10
select serveroutput on
declare
--定义循环变量
pnum number:=1;
begin
loop
--退出条件:循环大于10
exit when pnum>10;
--打印该变量的值
dbms_output.put_line(pnum);
--循环变量+1
pnum:=pnum+1;
end loop;
end;
/
3、
FOR I IN 1..3 LOOP
语句序列;
END LOOP;
例;
--使用for循环打印1-10
set serveroutput on
declare
--定义循环变量
pnum number:=1;
begin
for pnum in 1..10 loop
dbms_output.put_line(pnum);
end loop;
end;
/