【oracle学习】6.plsql程序语法

前言
我们以下的所有操作均在PL/Sql Developer工具上完成:

我们以下的表操作可能会基于以下两张表:
我们创建一个员工表和部门表:

员工信息表

[sql] view plain copy

  1. create table EMP(
  2.     EMPNO NUMBER,
  3.     ENAME VARCHAR2(10),
  4.     JOB VARCHAR2(9),
  5.     MGR NUMBER,
  6.     HIREDATE DATE,
  7.     SAL BINARY_DOUBLE,
  8.     COMM BINARY_DOUBLE,
  9.     DEPTNO NUMBER
  10. );

其中job是职位,mgr是该员工的上司的id,sal是工资,comm是提成,deptno是所属部门。

SQL> select * from emp;
EMPNO ENAME                JOB                            MGR HIREDATE         SAL  COMM          DEPTNO
————— ——————– —————— ————— ————– —– —– —————
1110 张三                 主管                          1110 12-3月 -14      5200     0          20
1111 李四                 销售                          1116 03-11月-15      3400   500          30
1112 王五                 销售                          1116 25-4月 -12      4400   800          30
1113 赵二                 后勤                          1110 30-5月 -11      3450     0          40
1114 李磊磊               会计                          1110 22-12月-15      2500     0          50
1115 张少丽               销售                          1110 11-3月 -16      2400  1400          30
1116 林建国               主管                          1116 22-1月 -16      5700     0          20
1117 马富邦               后勤                          1116 22-7月 -13      2800     0          40
1118 沈倩                 会计                          1116 06-5月 -10      2100     0          50

部门表

[sql] view plain copy

  1. create table dept(
  2.     DEPTNO NUMBER,
  3.     DNAME VARCHAR2(50)
  4. );

SQL> select * from dept t;

DEPTNO    DNAME
——–  ——–
20        管理部门
30        销售部门
40        后勤部门
50        金融部门

什么是PLSQL?
我们用Java语言可以编写Java程序,里面有许多有用的API供我们调用来实现一些功能。
而我们的PLSQL(Procedure Language/SQL)就是用来操作数据库的一种程序语言,它可以定义变量、输入输出和打印等等,
含有像Java一样的API供我们调用。
PLSQL是Oracle对sql语言的过程化拓展。
旨在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。

PLSQL语法:
首先“declare”声明下面是PLSQL语句。
declare
–说明部分(变量说明,光标申明,例外说明)
begin
–程序体(DML语句)
–调用程序包(类似Java的API)
exception
–例外处理语句
end;
/     –退出并执行程序

我们使用控制台输出HelloWorld

[sql] view plain copy

  1. declare
  2. begin
  3.    dbms_output.put_line(‘HelloWorld’);
  4. end;

打开oracle的输出开关
set serveroutput on
然后我们就输出HelloWorld了:

除了刚刚的dbms_output.put_line()打印语句,使用了dbms_output程序包。
我们使用desc+程序包名,可以查看程序包给我们提供了哪些方法:

相当于Java的API文档。

oracle还给我们提供了许多类似的程序包供我们使用。
我们来逐步介绍plsql的语法和语句:

(1)变量和常量说明(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; –记录型变量(rowtype代表表里面的一整行的类型)。

我们来编写一个定义变量的例子:
我们查询并打印emp表中EMPNO为1110的员工姓名和薪水

[sql] view plain copy

  1. declare
  2.   –定义变量
  3.   pename emp.ename%type;
  4.   psal emp.sal%type;
  5. begin
  6.   –查询
  7.   select ename,sal into pename,psal from emp where empno=1110;
  8.   –打印
  9.   dbms_output.put_line(pename||‘的薪水是’||psal);
  10. end;
  11. /

结果:

然后举一个记录型变量的例子,同样完成上面的要求:
declare
–定义变量
emp_rec emp%rowtype;
begin
–得到empno为1110的员工的所有信息
select * into emp_rec from emp where empno=1110;
dbms_output.put_line(emp_rec.ename||’的薪水是’||emp_rec.sal);
end;
/

结果:

(2)IF语句
语法:
1、IF 条件 THEN 语句1;
语句2;
END IF;

2、IF 条件 THEN 语句序列1;
ELSE 语句序列2;
END IF;

3、IF 条件 THEN 语句;
ELSIF 语句 THEN 语句;
ELSE 语句;
END IF;

例子:判断用户输入的数字

[sql] view plain copy

  1. –prompt提示语句
  2. –&num接收键盘输入,其中num是一个地址值
  3. prompt ‘请输入一个数字’;
  4. pro
  5. declare
  6.    –变量保存输入的数字
  7.    pnum number:=#
  8. begin
  9.   –判断
  10.   if pnum>0 then
  11.     dbms_output.put_line(‘您输入的是正数!’);
  12.   elsif pnum<0 then
  13.     dbms_output.put_line(‘您输入的是负数!’);
  14.   elsif pnum=0 then
  15.     dbms_output.put_line(‘您输入的是0!’);
  16.   end if;
  17. end;
  18. /

运行


(3)循环语句
1、WHILE total<=25000
LOOP
……
total:=total+salary;
END LOOP;

2、LOOP
EXIT[when 条件];
……
END LOOP;

3、FOR I IN 1..3
LOOP
语句序列;
END LOOP;

例子:打印1-10

[sql] view plain copy

  1. declare
  2.   pnum number:=1;
  3. begin
  4.   loop
  5.   –退出:成立退出,不成立循环
  6.   exit when pnum>10;
  7.   –隐式转换(数字转字符)
  8.   dbms_output.put_line(pnum);
  9.   pnum:=pnum+1;
  10.   end loop;
  11. end;
  12. /

结果:

打印emp表中所有员工的姓名:

[sql] view plain copy

  1. declare
  2.   emp_rec emp%rowtype;
  3. begin
  4.   for emp_rec in (select ename from emp)
  5.   loop
  6.   dbms_output.put_line(emp_rec.ename);
  7.   end loop;
  8. end;
  9. /

结果

未经允许不得转载:JX BLOG » 【oracle学习】6.plsql程序语法

赞 (1)

评论 0

评论前必须登录!

登陆 注册