1.
declare
--类型定义 cursor c_emp is select * from emp_info; --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型 c_row c_emp%rowtype; begin for c_row in c_emp loop dbms_output.put_line(c_row.id||'-'||c_row.emp_id||'-'||c_row.emp_name||'-'||c_row.emp_sex); end loop; end;2.
--Fetch游标
--使用的时候必须要明确的打开和关闭declare
--类型定义 cursor c_emp is select * from emp_info; --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型 c_row c_emp%rowtype; begin open c_emp; loop --提取一行数据到c_row fetch c_emp into c_row; --判读是否提取到值,没取到值就退出 --取到值c_job%notfound 是false --取不到值c_job%notfound 是true exit when c_emp%notfound; dbms_output.put_line(c_row.id||'-'||c_row.emp_id||'-'||c_row.emp_name||'-'||c_row.emp_sex); end loop; --关闭游标 close c_emp; end;3.
begin update emp_info set emp_name='gxl@@' WHERE EMP_id=2; if sql%isopen then dbms_output.put_line('Openging'); else dbms_output.put_line('closing'); end if; if sql%found then dbms_output.put_line('游标指向了有效行');--判断游标是否指向有效行 else dbms_output.put_line('Sorry'); end if; if sql%notfound then dbms_output.put_line('Also Sorry'); else dbms_output.put_line('Haha'); end if; dbms_output.put_line(sql%rowcount); exception when no_data_found then dbms_output.put_line('Sorry No data'); when too_many_rows then dbms_output.put_line('Too Many rows'); WHEN OTHERS THEN Dbms_Output.put_line('OTHERS!');end;
4.
--3,使用游标和while循环来显示所有部门的的地理位置(用%found属性) --游标声明 declare --类型定义 cursor c_emp is select * from emp_info; --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型 c_row c_emp%rowtype; begin --打开游标 open c_emp; --给第一行喂数据 fetch c_emp into c_row; --测试是否有数据,并执行循环 while c_emp%found loop dbms_output.put_line('部门地点:'||c_row.emp_name); --给下一行喂数据 fetch c_emp into c_row; end loop; close c_emp; end; 5. declare --类型定义 cursor c_emp(emp_id_i number) is select * from emp_info where emp_id = emp_id_i; --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型 c_row c_emp%rowtype; begin for c_row in c_emp(1) loop dbms_output.put_line(c_row.id||'-'||c_row.emp_id||'-'||c_row.emp_name||'-'||c_row.emp_sex); end loop; end;6.
--6:用更新游标来为雇员加佣金:(用if实现,创建一个与emp表一摸一样的emp1表,对emp1表进行修改操作),并将更新前后的数据输出出来 - create table emp_info1 as select * from emp_info; declare cursor csr_Update is select * from emp_info1 for update OF emp_name; empInfo csr_Update%rowtype; emp_name_info emp_info1.emp_name%TYPE;begin FOR empInfo IN csr_Update LOOP IF empInfo.emp_id<2 THEN emp_name_info:='a'; elsif empInfo.emp_id=3 THEN emp_name_info:='b'; END IF; UPDATE emp_info1 SET emp_name=emp_name_info WHERE CURRENT OF csr_Update; END LOOP;END;