wordpress网站如何app,母婴网站设计分析,WordPress主题Cute主题,工信和信息化网站备案系统ORACLE下的游标操作
游标是sql的一个内存工作区#xff0c;由系统或者用户以变量的形式定义。游标的作用是用于临时存储从数据库中提取的数据块。游标有静态游标、动态游标之分#xff0c;静态游标又可分为隐式游标和显式游标。静态游标是在编译时期就决定了结果集的#x…ORACLE下的游标操作
游标是sql的一个内存工作区由系统或者用户以变量的形式定义。游标的作用是用于临时存储从数据库中提取的数据块。游标有静态游标、动态游标之分静态游标又可分为隐式游标和显式游标。静态游标是在编译时期就决定了结果集的不能传递参数而动态游标是可以通过在运行期间传递参数来获取数据结果集的。
游标的属性如下 隐式游标的属性 SQL%ROWCOUNT整型 代表dml语句成功执行的数据行数 SQL%FOUND布尔值 判断增删改查操作是否操作成功 SQL%NOTFOUND布尔值 判断增删改查操作是否操作成功 SQL%ISOPEN布尔值 DML语句在执行过程中为真结束后为假 1.隐式游标
隐式游标是数据库系统自动打开和关闭的不需要控制一次只能获取一条数据例如使用select查询记录数updateinsertdelete等语句时。隐式游标一般用于根据操作语句对应的游标属性来了解操作的状态和结果从而达到流程的控制。
接下来介绍一下隐式游标的使用 -- 判断update是否执行成功成功则提交事务 BEGIN UPDATE person SET namezhangsan; where id1 IF SQL%FOUND THEN COMMIT; dbms_output.put_line(success); ELSE dbms_output.put_line(failed); END IF END; -- 判断影响的行数 DECLARE rowCount INT; BEGIN UPDATE person SET nameaaa; rowRount:SQL%ROWCOUNT; dbms_output.put_line(rowRount|| rowRount); END;
2.显示游标
从数据库中提取多行数据时要放到显式游标中存储。使用显示游标大致分为五步使用CURSOR定义显示游标如下 1、定义游标 Cursor cursor_name IS 2、打开游标 OPEN cursor_name 3、操作游标 FETCH cursor_name INTO somVar 4、判断游标是否获取到行值 cursor_name%NOTFOUND; 5、关闭游标 CLOSE cursor_name
看一个具体的实例 将一个表中的数据放到两个数据表中 DECLARE t_id int; t_name varchar2; t_sex char(1); --定义游标 CURSOR teacher_cur IS SELECT tid,name,sex FROM teacher WHERE tid26; BEGIN --打开游标 OPEN teacher_cur; LOOP --提取游标 FETCH teacher_cur INTO t_id, t_name,t_sex; --一定要退出循环 EXIT WHEN NOT teacher_cur%FOUND; IF teacher_sexM THEN 一插入数据到表 COMMIT; ELSE -- 插入数据到表二 COMMIT; END IF; END LOOP; IF teacher_cur%ISOPEN THEN --关闭游标 CLOSE teacher_cur; END IF END;
3.动态游标
ref cursor动态游标是可以通过在运行期间传递参数来获取数据结果集的动态游标使用REF CURSOR进行定义。 DECLARE --指定动态游标类型 TYPE cursor_type IS REF CURSOR; myCursor cursor_type;--游标类型 v_sql VARCHAR2(200); v_person person%ROWTYPE; BEGIN --定义动态的sql语句 v_sql:select * from person where pname LIKE ‘‘%m%’’; --打开游标 OPEN myCursor FOR v_sql; LOOP --提取游标 FETCH myCursor INTO v_person; --停止循环 EXIT WHEN myCursor%NOTFOUND; dbms_output.put_line (v_person.id); END LOOP; EXCEPTION WHEN OTHERS THEN CLOSE myCursor; IF myCursor%ISOPEN THEN CLOSE myCursor; END IF; END;