学习PLSQL语句的目的;
让原本在应用程序的判断结果的代码,写成sql语句,从而提高应用程序的速度;
在于存储过程 和存储函数 还有触发器之前肯定要学习PLSQL;
提高操作oracle的速度和为之后做准备;
基本语法:
declare
说明部分(变量说明、光标申明、例外说明)
begin
语句序列(DML 语句)
exception
例外处理语句
end;
/
打开输出开关;
set serveroutput on
/
什么是PL/SQL程序;
PL/SQL (Procedure Language/SQL);
PLSQL 是Oracle 对sql 语言的过程化扩展;
指在sql命令语言中增加了过程处理语句(如分支、循环等),使得SQL 语言具有过程处理能力。PLSQL 是面向过程的语言;
定义基本变量;
类型:char ,varchar2,date,number,boolean,long
特殊变量类型:
引用型变量:
my_name emp.name%type;
PLSQL语句支持SQL语句,PLSQL语句有两种赋值方式,一种是:= 另外一种是into 关键字;
select ename,sal into pername,psal from emp where empno=7839;
SYS.DBMS_OUTPUT.PUT_LINE(pername||'dddddddpsal'||psal );
记录型类型:是行类型;取一行的类型作为我这个变量的类型;
举例说明:
emp_rec emp%rowtype;
记录型变量分量的引用;
emp_rec.ename :='ADMS';
if语句的使用;语法如下;
第一种写法:
IF 条件 THEN 语句1
语句2
end if;
第二种写法;
IF 条件 then 语句序列1
else 语句序列2
end if;
第三种写法:
IF 条件 THEN 语句
elseif 语句 then 语句;
else 语句
end if
循环语句:
while total <= 2333 LOOP
...
total:=total + salary;
END LOOP;
第二种循环语句:
Loop
EXIT [when 条件];
End loop
第三种:
FOR IN 1...4 LOOP
语句序列;
END LOOP;
光标:
在PL/SQL语句中 ,光标代表一个集合;也叫游标;
光标的语法:
CURSOR 光标名[参数名 数据类型[参数名 参数类型] IS SELECT 语句;
从光标中取值;
open c1;(打开光标执行查询);
close c1(关闭光标)
fetch c1 into pename; (取一条记录);fetch 的作用:把当前指针指向的记录返回;将指针指向下一条记录;
光标的属性和光标数目限制;
属性:%found %notfound %isopen %rowcount(不是总行数,而是取走的行数));
修改光标数的限制: alter system set open_cursor = 400 scope=both;
scope 的取值:both memory spfile(数据库需要重启);
带参数的光标:
cursor cemp(dno number) is select ename from emp where deptno = dno;
打开光标的时候要把参数传递进去;
例外:
系统例外:No_date_found(没有找到数据);
Too_many_rows select...into 语句匹配多个行);
Timeout_on_resource (在等待资源时超时)
Value_error (算术或转换错误);
Zero_Divide (被零除);
自定义例外;
定义变量,类型是exception
使用raise 抛出自定义例外;