首页/应用软件/内容

如何运用Oracle中游标Cursor

应用软件2022-10-18 阅读()
V_C);   END   SQL>/   V_A=10 V_B=15 V_C=   PL/SQL procedure successfully completed.   SQL>

其他DML语句

其它操作数据的DML语句是:INSERT、UPDATE、DELETE和LOCK TABLE,这些语句在PL/SQL中的语法与在SQL中
的语法相同。我们在前面已经讨

论过DML语句的使用这里就不再重复了。在DML语句中可以使用任何在DECLARE部分声明的变量,如果是嵌套
块,那么要注意变量的作用范围。

例:

  CREATE OR REPLACE PROCEDURE FIRE_EMPLOYEE (pempno in number)
  AS
  v_ename EMP.ENAME%TYPE;
  BEGIN
  SELECT ename INTO v_ename
  FROM emp
  WHERE empno=p_empno;
  INSERT INTO FORMER_EMP(EMPNO,ENAME)
  VALUES (p_empno,v_ename);
  DELETE FROM emp
  WHERE empno=p_empno;
  UPDATE former_emp
  SET date_deleted=SYSDATE
  WHERE empno=p_empno;
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
  DBMS_OUTPUT.PUT_LINE('Employee Number Not Found!');
  END

  DML语句的结果

当执行一条DML语句后,DML语句的结果保存在四个游标属性中,这些属性用于控制程序流程或者了解程序
的状态。当运行DML语句时,PL/SQL打开一个内建游标并处理结果,游标是维护查询结果的内存中的一个区域,
游标在运行DML语句时打开,完成后关闭。隐式游标只使用SQL%FOUND,

SQL%NOTFOUND,SQL%ROWCOUNT三个属性.SQL%FOUND,SQL%NOTFOUND是布尔值,SQL%ROWCOUNT是整数值。

SQL%FOUND和SQL%NOTFOUND

在执行任何DML语句前SQL%FOUND和SQL%NOTFOUND的值都是NULL,在执行DML语句后,SQL%FOUND的属性值将是:

  . TRUE :INSERT
  . TRUE :DELETE和UPDATE,至少有一行被DELETE或UPDATE.
  . TRUE :SELECT INTO至少返回一行

当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE。

SQL%ROWCOUNT

在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功
,SQL%ROWCOUNT的值为1,如果没有成功,SQL%ROWCOUNT的值为0,同时产生一个异常NO_DATA_FOUND.

SQL%ISOPEN

SQL%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果游标关闭,则为FALSE.对于隐式游标而言SQL%
ISOPEN总是FALSE,这是因为隐式游

标在DML语句执行时打开,结束时就立即关闭。

事务控制语句

事务是一个工作的逻辑单元可以包括一个或多个DML语句,事物控制帮助用户保证数据的一致性。如果事务控制逻辑单元中的任何一个DML
语句失败,那么整个事务都将回滚,在PL/SQL中用户可以明确地使用COMMIT、ROLLBACK、SAVEPOINT以及
SET TRANSACTION语句。

COMMIT语句终止事务,永久保存数据库的变化,同时释放所有LOCK,ROLLBACK终止现行事务释放所有LOCK,
但不保存数据库的任何变化,SAVEPOI

NT用于设置中间点,当事务调用过多的数据库操作时,中间点是非常有用的,SET TRANSACTION用于设置事
务属性,比如read-write和隔离级等。

显式游标

查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用select into语句。PL/SQL管理隐式
游标,当查询开始时隐式游标打开,查询结束时隐式游标自动关闭。显式游标在PL/SQL块的声明部分声明,在执行部分或异常处理部分打开,取数据,关闭。

使用游标

这里要做一个声明,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的
游标都是指显式游标。要在程序中使用游标,必须首先声明游标。

声明游标

语法:

CURSOR cursor_name IS select_statement;

在PL/SQL中游标名是一个未声明变量,不能给游标名赋值或用于表达式中。

例:

  DELCARE
  CURSOR C_EMP IS SELECT empno,ename,salary
  FROM emp
  WHERE salary>2000
  ORDER BY ename;
  ........
  BEGIN

  在游标定义中SELECT语句中不一定非要表可以是视图,也可以从多个表或视图中选择的列,甚至可以使用*
来选择所有的列 。

打开游标

使用游标中的值之前应该首先打开游标,打开游标初始化查询处理。打开游标的语法是:

  OPEN cursor_name

 cursor_name是在声明部分定义的游标名。

例:

OPEN C_EMP;

  关闭游标

语法:

 CLOSE cursor_name

例:

CLOSE C_EMP;

从游标提取数据

从游标得到一行数据使用FETCH命令。每一次提取数据后,游标都指向结果集的下一行。语法如下:

FETCH cursor_name INTO variable[,variable,...]

对于SELECT定义的游标的每一列,FETCH变量列表都应该有一个变量与之相对应,变量的类型也要相同。

例:

  SET SERVERIUTPUT ON
  DECLARE
  v_ename EMP.ENAME%TYPE;
  v_salary EMP.SALARY%TYPE;
  CURSOR c_emp IS SELECT ename,salary FROM emp;
  BEGIN
  OPEN c_emp;
  FETCH c_emp INTO v_ename,v_salary;
DBMS_OUTPUT.PUT_LINE('Salary of Employee'(北联网教程,专业提供视频软件下载)

第1页  第2页  第3页  第4页  第5页  第6页  第7页  第8页  第9页  第10页  第11页  第12页  第13页  第14页  第15页  第16页  第17页  第18页  第19页  第20页  第21页  第22页  第23页  第24页  第25页  第26页  第27页  第28页  第29页  第30页  第31页  第32页  第33页  第34页  第35页  第36页  第37页  第38页  第39页  第40页  第41页  第42页  第43页  第44页  第45页  第46页  第47页  第48页  第49页  第50页  第51页  第52页  第53页  第54页  第55页  第56页  第57页  第58页  第59页  第60页  第61页  第62页  第63页  第64页  第65页  第66页  第67页  第68页  第69页  第70页  第71页  第72页  第73页  第74页  第75页  第76页  第77页  第78页  第79页  第80页  第81页  第82页  第83页  第84页  第85页  第86页  第87页  第88页  第89页  第90页  第91页  第92页  第93页  第94页  第95页  第96页  第97页  第98页  第99页  第100页  第101页  第102页  第103页  第104页  第105页  第106页  第107页  第108页  第109页  第110页  第111页  第112页  第113页  第114页  第115页  第116页  第117页  第118页  第119页  第120页  第121页  第122页  第123页  第124页  第125页  第126页  第127页  第128页  第129页  第130页  第131页  第132页  第133页  第134页  第135页  第136页  第137页  第138页  第139页  第140页  第141页  第142页  第143页  第144页  第145页  第146页  第147页  第148页  第149页  第150页  第151页  第152页  第153页  第154页  第155页  第156页  第157页  第158页  第159页  第160页  第161页  第162页  第163页  第164页  第165页  第166页  第167页  第168页  第169页  第170页  第171页  第172页  第173页  第174页  第175页  第176页  第177页  第178页  第179页  第180页 

……

相关阅读