oracle PL/SQL总结:
1.事务控制语句
事务是一个工作的逻辑单元可以包括一个或多个DML语句,事物控制帮助用户保证数据的一致性。如果事务控制逻辑单元中的任何一个DML语句失败,那么整个事务都将回滚,在PL/SQL中用户可以明确地使用COMMIT、ROLLBACK、SAVEPOINT以及SET TRANSACTION语句。
COMMIT语句终止事务,永久保存数据库的变化,同时释放所有LOCK
ROLLBACK终止现行事务释放所有LOCK,但不保存数据库的任何变化
SAVEPOINT用于设置中间点,当事务调用过多的数据库操作时,中间点是非常有用的
SET TRANSACTION用于设置事务属性,比如read-write和隔离级等。
2.记录变量
在PL/SQL中可以将变量和常量声明为内建或用户定义的数据类型,以引用一个列名,同时继承他的数据类型和大小。
这种动态赋值方法是非常有用的,比如变量引用的列的数据类型和大小改变了,如果使用了%TYPE或%rowtype,那么用户就不必修改代码。
a. %TYPE用来声明一个变量和指定表的column一样的数据类型,不但列名可以使用%TYPE,而且变量、游标、记录,或声明的常量都可以使用%TYPE。这对于定义相同数据类型的变量非常有用。
DELCARE
v_empno SCOTT.EMP.EMPNO%TYPE;
V_A NUMBER(5):=10;
V_B V_A%TYPE:=15;
V_C V_A%TYPE;
b. %ROWTYPE用来声明一个和表中记录一样的record
如
DECLARE
v_emp emp%ROWTYPE;
BEGIN
v_emp.empno := 10;
v_emp.ename := 'XXXXXXX';
END;
/
3.PL/SQL中SELECT语句只返回一行数据。如果超过一行数据,那么就要使用显式游标。显式游标在PL/SQL块的声明部分声明,在执行部分或异常处理部分打开,取数据,关闭。在大多数时候我们在设计程序的时候都遵循下面的步骤:
1、打开游标
2、开始循环
3、从游标中取值
4、检查那一行被返回
5、处理
6、关闭循环
7、关闭游标
1.简单for循环使用游标
--scott用户登录
sqlplus/nolog
conn scott/tiger;
--设置服务器输出显示
set serveroutput on;
--声明游标
declare cursor c_test is select empno,ename from emp;
--定义游标类型变量a_test
a_test c_test%rowtype;
--开始
begin
--循环语句输出内容
for a_test in c_test loop
dbms_output.put_line('The employee'||a_test.ename||'empno is:'||a_test.empno);
end loop;
end;
/
-----通过fetch into 从游标中取值
declare
v_empno emp.empno%type;
v_ename emp.ename%type;
cursor c_test is select empno,ename from emp;
begin
open c_test;
fetch c_test into v_empno,v_ename;
while c_test%found
loop
dbms_output.put_line('The employee'||v_ename||'empno is:'||v_empno);
fetch c_test into v_empno,v_ename;
end loop;
end;
2.加入异常处理
declare
v_empno emp.empno%type;
v_ename emp.ename%type;
exception1 exception;
cursor c_emp is select empno,ename from emp;
begin
open c_emp;
fetch c_emp into v_empno,v_ename;
if c_emp%notfound then
raise exception1;
else
dbms_output.put_line('The emplouee '||v_ename||' empno is : '||v_empno);
end if;
while c_emp%FOUND
Loop
dbms_output.put_line('The emplouee '||v_ename||' empno is : '||v_empno);
fetch c_emp into v_empno,v_ename;
end loop;
close c_emp;
Exception
when exception1 then
dbms_output.put_line('**No data found**');
end;
---未完结