oracle 创建游标

第一种方法
declare

       v_sal employees.salary%type;
    --1.定义游标
  cursor emp_sal_cureor is select salary from employees  where department_id = 80;
begin
  --2.打开游标
  open emp_sal_cureor ;
  -- 3.提取游标
  fetch emp_sal_cureor into v_sal ;
 
  while emp_sal_cureor %found loop
       dbms_output.put_line('salary:'||v_sal);
       fetch emp_sal_cureor into v_sal ;
  end loop;
  --4.关闭游标
  close emp_sal_cureor;
en d;
  第二种方法

declare
  -- 声明一个记录类型
  type emp_record is record(
       v_sal employees.salary%type,
       v_name employees.last_name%type
  );
  -- 声明一个记录类型的变
  v_emp_record emp_record;
  --1. 定义游标
  cursor emp_cursors is select salary , last_name from employees where department_id=80;
begin
  -- 2.-- 打开游标
  open emp_cursors ;
  --3.提取游标
  fetch emp_cursors into v_emp_record ;
 
  while emp_cursors %found loop
       dbms_output.put_line('name:'||v_emp_record.v_name ||',salary:'||v_emp_record.v_sal);
        fetch emp_cursors into v_emp_record ;
   end loop;
   --4.关闭游标
   close emp_cursors ;
end;

第三种方法
declare  
  cursor emp_cureor is  select last_name ,salary from employees where department_id = 80;
begin
  for c in  emp_cureor loop
      dbms_output.put_line('name:'||c.last_name ||',salary:'||c.salary);
  end loop;
end;  

-- 带参数的游标

declare
   --
   cursor emp_sal_cursor (dept_id number ,sal number) is
   select salary + 100 sal , employee_id id
   from employees
   where department_id = dept_id and salary >sal;
   
   -- 定义基本数变量
   temp number(4,2);
begin
   -- 处理游标的循环操作
    for c in  emp_sal_cursor (sal=>400 ,dept_id =>80)loop
         --判断员工的工资
         if c.sal <= 500 then
            temp := 0.05;
         elsif c.sal <= 10000 then
             temp := 0.03;
          elsif c.sal <= 1500 then
                temp := 0.02;
           else
              temp := 0.01;
           end if ;
         dbms_output.put_line(c.sal || ':' || c.id || ',' || temp);
      end loop ;
 end ;   
       

 

你可能感兴趣的:(oracle)