PL/SQL游标使用

 

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;

 

---未完结

 

 

 

 

 

 

 

 

 

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值