推销什么企业做网站和app6,企业网站建设报价方案模板,外贸网络推广培训,网站数据做面板分析1.游标概念在 PL/SQL 块中执行 SELECT、INSERT、DELETE 和 UPDATE 语句时#xff0c;ORACLE 会在内存中为其分配上下文区(Context Area)#xff0c;即缓冲区。游标是指向该区的一个指针#xff0c;或是命名一个工作区(Work Area)#xff0c;或是一种结构化数据类型。它为应…1.游标概念在 PL/SQL 块中执行 SELECT、INSERT、DELETE 和 UPDATE 语句时ORACLE 会在内存中为其分配上下文区(Context Area)即缓冲区。游标是指向该区的一个指针或是命名一个工作区(Work Area)或是一种结构化数据类型。它为应用等量齐观提供了一种对具有多行数据查询结果集中的每一行数据分别进行单独处理的方法是设计嵌入式SQL 语句的应用程序的常用编程方式。在每个用户会话中可以同时打开多个游标其数量由数据库初始化参数文件中的OPEN_CURSORS 参数定义。对于不同的 SQL 语句游标的使用情况不同非查询语句--》 隐式的结果是单行的查询语句 --》隐式的或显示的结果是多行的查询语句--》 显示的2.处理显示游标2.1显示游标处理的4个步骤1.定义/ / 声明 游标就是定义一个游标名以及与其相对应的 SELECT 语句。格式CURSOR cursor_name[(parameter[, parameter]…)][RETURN datatype]ISselect_statement;注意1.游标参数只能为输入参数2.在指定数据类型时不能使用长度约束3.[RETURN datatype]是可选的表示游标返回数据的数据。如果选择则应该严格与 select_statement 中的选择列表在次序和数据类型上匹配。一般是记录数据类型或带“%ROWTYPE”的数据。2.打开游标就是执行游标所对应的 SELECT 语句将其查询结果放入工作区并且指针指向工作区的首部标识游标结果集合。如果游标查询语句中带有 FOR UPDATE 选项OPEN 语句还将锁定数据库表中游标结果集合对应的数据行。格式OPEN cursor_name[([parameter ] value[, [parameter ] value]…)];3.提取游标就是检索结果集合中的数据行放入指定的输出变量中。格式FETCH cursor_name INTO {variable_list | record_variable };执行 FETCH 语句时每次返回一个数据行然后自动将游标移动指向下一个数据行。当检索到最后一行数据时如果再次执行 FETCH 语句将操作失败并将游标属性%NOTFOUND 置为 TRUE。所以每次执行完 FETCH 语句后检查游标属性%NOTFOUND就可以判断 FETCH 语句是否执行成功并返回一个数据行以便确定是否给对应的变量赋了值。4.关闭游标当提取和处理完游标结果集合数据后应及时关闭游标以释放该游标所占用的系统资源并使该游标的工作区变成无效不能再使用 FETCH 语句取其中数据。关闭后的游标可以使用 OPEN 语句重新打开。格式CLOSE cursor_name;注意定义的游标不能有 INTO 子句。游标属性游标属性 属性作用Cursor_name%FOUND 布尔型属性当最近一次提取游标操作 FETCH成功则为 TRUE,否则为 FALSECursor_name%NOTFOUND 布尔型属性与%FOUND 相反Cursor_name%ISOPEN 布尔型属性当游标已打开时返回 TRUECursor_name%ROWCOUNT 数字型属性返回已从游标中读取的记录数。2.2使用案例--普通游标declarecursor emp_cursor1 isselect ename,sal from emp where sal 1000;v_name emp.ename%type;v_sal emp.sal%type;beginopen emp_cursor1;loopfetch emp_cursor1into v_name,v_sal;exit when emp_cursor1%notfound;dbms_output.put_line(v_name || --- || v_sal);--dbms_output.put_line(isOpen:||emp_cursor1%isopen); --查看游标状态end loop;close emp_cursor1;end;--游标传参declarecursor emp_cursor2(cursor_sal number default 2000) is --(此处的参数是默认参数后面可以重新设置此默认值失效)select ename,sal from emp where sal cursor_sal;v_name emp.ename%type;v_sal emp.sal%type;beginopen emp_cursor2(cursor_sal3000); --(重新设置参数值)loopfetch emp_cursor2into v_name,v_sal;exit when emp_cursor2%notfound;dbms_output.put_line(v_name || --- || v_sal);end loop;dbms_output.put_line(rowcount:||emp_cursor2%rowcount); --(游标记录数)close emp_cursor2;end;--if...then(给工资低于2000的员工加薪1元)declarecursor emp_cursor3 isselect ename, sal, empno from emp;v_no emp.empno%type;v_name emp.ename%type;v_sal emp.sal%type;beginopen emp_cursor3;loopfetch emp_cursor3into v_name, v_sal, v_no;exit when emp_cursor3%notfound;if v_sal 2000 thenupdate emp set sal sal 1 where empno v_no;dbms_output.put_line(v_name || --- || v_sal);end if;end loop;dbms_output.put_line(rowcount: || emp_cursor3%rowcount);close emp_cursor3;end;--有参数有返回值的游标(记录类型)declaretype emp_record_type is record(v_no emp.empno%type,v_name emp.ename%type,v_sal emp.sal%type);v_emp_record emp_record_type;cursor emp_cursor4(dept_no number) return emp_record_type isselect empno, ename, sal from emp where deptno dept_no;beginopen emp_cursor4(dept_no20);loopfetch emp_cursor4into v_emp_record;if emp_cursor4%found thendbms_output.put_line(v_emp_record.v_name || --- ||v_emp_record.v_sal);elsedbms_output.put_line(已经处理完结果集);exit;end if;end loop;close emp_cursor4;end;--for循环格式游标declarecursor emp_cursor5 isselect ename, sal from emp;beginfor v_sal in emp_cursor5 loopdbms_output.put_line(v_sal.ename || --***-- || v_sal.sal);end loop;end;--for循环格式游标带参数declarecursor emp_cursor5(dept_no number) isselect ename, sal from emp where deptnodept_no;beginfor v_sal in emp_cursor5(30) loopdbms_output.put_line(v_sal.ename || --***-- || v_sal.sal);end loop;end;--for循环子查询方式游标beginfor v_sal in (select ename, sal from emp where deptno20) loopdbms_output.put_line(v_sal.ename || --***-- || v_sal.sal);end loop;end;3.处理隐式游标显式游标主要是用于对查询语句的处理尤其是在查询结果为多条记录的情况下而对于非查询语句如修改、删除操作则由 ORACLE 系统自动地为这些操作设置游标并创建其工作区这些由系统隐含创建的游标称为隐式游标隐式游标的名字为 SQL这是由ORACLE 系统定义的。对于隐式游标的操作如定义、打开、取值及关闭操作都由 ORACLE系统自动地完成无需用户进行处理。用户只能通过隐式游标的相关属性来完成相应的操作。在隐式游标的工作区中所存放的数据是与用户自定义的显示游标无关的、最新处理的一条 SQL 语句所包含的数据。格式调用为 SQL%隐式游标属性属性 值 SELECT INSERT UPDATE DELETESQL%ISOPEN FALSE FALSE FALSE FALSESQL%FOUND TRUE 有结果 成功 成功SQL%FOUND FALSE 没结果 失败 失败SQL%NOTFUOND TRUE 没结果 失败 失败SQL%NOTFOUND FALSE 有结果 成功 失败SQL%ROWCOUNT 返回行数只为 1插入的行数 修改的行数 删除的行数使用案例DECLAREv_rows NUMBER;BEGIN--更新数据UPDATE emp SET sal 30000WHERE deptno 20;--获取默认游标的属性值v_rows : SQL%ROWCOUNT;DBMS_OUTPUT.PUT_LINE(更新了||v_rows||个雇员的工资);--回退更新以便使数据库的数据保持原样ROLLBACK;END;