前言
我们以下的所有操作均在PL/Sql Developer工具上完成:
我们以下的表操作可能会基于以下两张表:
我们创建一个员工表和部门表:
员工信息表
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
部门表
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
打开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的员工姓名和薪水
结果:
然后举一个记录型变量的例子,同样完成上面的要求:
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;
例子:判断用户输入的数字
运行
(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
结果:
打印emp表中所有员工的姓名:
结果
我们以下的所有操作均在PL/Sql Developer工具上完成:
我们以下的表操作可能会基于以下两张表:
我们创建一个员工表和部门表:
员工信息表
create table EMP(
EMPNO NUMBER,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER,
HIREDATE DATE,
SAL BINARY_DOUBLE,
COMM BINARY_DOUBLE,
DEPTNO NUMBER
);
其中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
部门表
create table dept(
DEPTNO NUMBER,
DNAME VARCHAR2(50)
);
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
declare
begin
dbms_output.put_line('HelloWorld');
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的员工姓名和薪水
declare
--定义变量
pename emp.ename%type;
psal emp.sal%type;
begin
--查询
select ename,sal into pename,psal from emp where empno=1110;
--打印
dbms_output.put_line(pename||'的薪水是'||psal);
end;
/
结果:
然后举一个记录型变量的例子,同样完成上面的要求:
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;
例子:判断用户输入的数字
--prompt提示语句
--&num接收键盘输入,其中num是一个地址值
prompt '请输入一个数字';
pro
declare
--变量保存输入的数字
pnum number:=#
begin
--判断
if pnum>0 then
dbms_output.put_line('您输入的是正数!');
elsif pnum<0 then
dbms_output.put_line('您输入的是负数!');
elsif pnum=0 then
dbms_output.put_line('您输入的是0!');
end if;
end;
/
运行
(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
declare
pnum number:=1;
begin
loop
--退出:成立退出,不成立循环
exit when pnum>10;
--隐式转换(数字转字符)
dbms_output.put_line(pnum);
pnum:=pnum+1;
end loop;
end;
/
结果:
打印emp表中所有员工的姓名:
declare
emp_rec emp%rowtype;
begin
for emp_rec in (select ename from emp)
loop
dbms_output.put_line(emp_rec.ename);
end loop;
end;
/
结果
转载请注明出处:http://blog.csdn.net/acmman/article/details/52402641