1、PL/SQL是过程语言(Procedural Language)与结构化查询语言结合而成的编程语言
PL/SQL是对SQL的扩张
支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构
可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑
与ORACLE服务器和ORACLE工具紧密集成,具备可移植性、灵活性和安全性
2、支持SQL,在PL/SQL中可以使用:
数据操作命令 事务控制命令 游标控制 SQL函数和SQL运算符
3、PL/SQL引擎驻留在ORACLE服务器中
该引擎接受PL/SQL块并对其进行编译执行
4、PL/SQL分为三个部分:声明部分 可执行部分 异常处理部分
声明部分:
给变量赋值由两种方法:(1)使用赋值语句:= (2)使用SELECT INTO语句
PL/SQL支持的内置数据类型:
(1)标量类型 数字、字符、布尔型、日期时间
(2) LOB类型 ( 存储非结构化数据块) BFILE BLOB CLOB NCLOB
(3) 属性类型 %TYPE %ROWTYPE
5、PL/SQL支持的流程控制结构:
(1)条件控制
IF语句: 有三种 IF-THEN IF-THEN-ELSE IF-THEN-ELSIF
CASE语句:用于格努据单个变量或表达式与多个值进行比较
begin
case '&grade"
when 'A' then DBMS_OUTPUT.PUT_LINE('YOUYI');
when 'B' then DBMS_OUTPUT.PUT_LINE('YOUXIU');
else DBMS_OUTPUT.PUT_LINE('MEIYOUCICHENGJI');
END CASE;
END;
(2) 循环控制
LOOP循环: --无条件循环
LOOP
sequence_of_statement;
END LOOP;
WHILE循环:根据条件循环
WHILE condtion LOOP
sequence_of_statement
END LOOP;
FOR循环:循环固定的次数
FOR counter in [REVERSE] values1...values2
LOOP
sequence_of_statement
END LOOP;
(3)顺序控制
GOTO语句 :无条件的转到标签指定的语句
NULL语句:什么也不做
DECLARE
qtyhand itemfiole.qty_hand%type;
relevel itemfile.re_level%type;
BEGIN
SELECT qty_hand.re_level INTO qtyhand.relevel
from itemfile where itemcode='i201';
if qtyhand<relevel then
GOTO updation;
else
GOTO quit;
end if;
<<updation>>
update itemfile set qty_hand=qty_hand+re_level
where itemcode='i201';
<<quit>>
NULL;
end;
6、动态SQL
动态SQL是指在PL/SQL程序执行时生成的SQL语句
编译程序对动态SQL不做处理,而是在程序运行时动态构造语句,对语句进行语法分析并执行
DDL语句命令和会话控制语句不能再PL/SQL中直接执行,但可以通过动态SQL执行
DECLARE
sql_stmt varchar2(200);
emp_id number(4):=7566;
emp_rec emp%rowtype;
BEGIN
EXECUTE IMMEDIATE
'create table bouns1 (id number,amt number)';
sql_stmt:='select * from emp where empno=:id';
EXECUTE IMMEDIATE sql_stmt into emp_rec USING emp_id;
END;
6、异常有两种l类型
预定义异常
用户定义异常