目录
一、PL/SQL概念:
PL/SQL是过程语言PL与结构化查询语言SQL结合而成的编程语言。
PL/SQL是针对Oracle数据库的;
它是过程语言 + 结构化查询语言的结合;
过程语言PL:如变量声明,流程的控制,循环等;
查询语言SQL:SQL语言,如增、删、改、查等;
PL/SQL是SQL的扩展版,SQL能做的,PL/SQL绝大多数都能做。
PL/SQL的优点:
1.支持SQL:数据操纵命令,事务控制命令,游标控制,SQL函数和SQL运算符;
2.支持面向对象编程;
3.可移植性,可运行在任何操作系统上;
4.经过编译执行,性能佳;
5.与SQL紧密集成,简化数据处理,支持SQL数据类型,支持NULL值,支持%type和%rowtype属性类型(oracle中最有意思的);
6.安全性
PL/SQL分成三个部分:
1. 声明部分
2. 可执行部分
3. 异常片理部分
语法结构:
[declare declaration] --声明部分
begin
executable statements --可执行部分
[exception handlers] --异常区
end;
输出:
select 'abc' from dual;
dbms_output.put_line('abc');
--打印输出(必带begin)
begin
dbms_output.put_line('abc');
end
赋值:( := )
--变量声明赋值,并打印
declare i number(6);
begin
i:=77; //:=赋值,select...into也是赋值
dbms_output.put_line(i);
end;
--在emp表中将工号为7369的姓名输出
declare sid number;
sname varchar2(22);
begin
sid:=7369;
select ename into sname from emp where empno=sid; --select...into赋值方式
dbms_output.put_line(sname);
end;
提示下:在begin里面用select语句,必定要用select…into。
===========================================
①数据类型:
1.标量类型
2.LOB类型
3.属性类型:
%type:提供某个变量或数据库表列的数据类型
%rowtype:提供表中一行的记录类型(非常有特色)
3.1 %type
--求7369的入职日期(在不知道该列是什么类型的情况下)
--申请一个与“入职日期”一样的
declare sid number;
shiredate emp.hiredate%type; --声明个变量,它的类型与表中某个列的类型一样
begin
sid:=7369;
select hiredate into shiredate from emp where empno=sid;
dbms_output.put_line(shiredate);
end;
--也可以sb shiredate%type;
--求某某的所有信息
declare sid number;
sname emp.ename%type;
sjob emp.job%type;
begin
sid:=7369;
select ename,job into sname,sjob from emp where empno=sid;
dbms_output.put_line(sname||' '||sjob);
end;
当然,要是表中有很多的列,还像以上这么写吗?
NO,使用行类型:%rowtype;
--查询某某的所有信息
declare sid number;
er emp%rowtype;
begin
sid:=7369;
select * into er from emp where empno=sid;
dbms_output.put_line(er.ename||' '||er.job);
end;
============================================
输入:& (一般做测试用,其它情况不怎么用)
declare sid number;
er emp%rowtype;
begin
sid:=&请输入; --&类似scanner
select * into er from emp where empno=sid;
dbms_output.put_line(er.ename||' '||er.job);
end;
注意:sid:=&请输入; --代表录入的是整型
sid:='&请输入'; --代表录入的是varchar2类型。
②逻辑比较:
<> , !=
③控制语句:
if 条件 then
……
else或者elsif…then
……
end if
例:
--工资大于3500交税,=3500刚好,<3500努力
if语句:
begin
if sal>3500 then
dbms_output.put_line('交税');
elsif sal=3500 then
dbms_output.put_line('刚好');
else
dbms_output.put_line('努力');
end if;
end;
case语句:
case
when then ;
when then ;
else
end case;
④循环语句:有三种:
1.loop 无条件循环
2.while
3.for
案例:
--打印1~100
declare i number;
begin
i:=1;
loop
dbms_output.put_line(i);
i:=i+1;
exit when i=100; --退出及退出条件
end loop;
end;
declare i number;
begin
i:=1;
<<b_loop>> --loop循环的名字
loop
dbms_output.put_line(i);
i:=i+1;
exit b_loop when i=100; --退出及退出条件
end loop;
end;
=
--求