欢迎投稿

今日深度:

oracle动态游标,oracle游标

oracle动态游标,oracle游标


declare
  v_col1 varchar2(254);
  v_col2 varchar2(254);
  v_sql  varchar2(1024);


  type my_cursor is ref cursor;
  v_cur my_cursor;
begin
  v_sql := 'select :1,:2 from dual where 1 = :3';
  open v_cur for v_sql
    using 'col1', 'col2', 1;
  loop
    fetch v_cur
      into v_col1, v_col2;
    exit when v_cur%notfound;
  
    dbms_output.put_line(v_col1 || '  ' || v_col2);
  
  end loop;
  close v_cur;

end;

显式Cursor的属性包含:
游标的属性      返回值类型     %ROWCOUNT       整型          获得FETCH语句返回的数据行数 %FOUND          布尔型        最近的FETCH语句返回一行数据则为真,否则为假 %NOTFOUND       布尔型        与%FOUND属性返回值相反 %ISOPEN         布尔型        游标已经打开时值为真,否则为假


ORACLE存储过程中的动态游标

你用Oracle 当前的用户是否创建了这张表,如果没有。。。那就是你没有建表的原因了还有可能你的表不是建立在当前的用户模式下,比如你的是建立在用户Scott模式下则你的语句应该这样写cursor curSort1 is select 服务类型 from scott.tabname order by 编码;
 

怎定义 动态游标 oracle

在大多数时候我们在设计程序的时候都遵循下面的步骤: 1、打开游标 2、开始循环 3、从游标中取值 4、检查那一行被返回 5、处理 6、关闭循环 7、关闭游标
例如:
DECALRE
CURSOR c_dept IS SELECT deptno,dname FROM dept ORDER BY deptno;
CURSOR c_emp (p_dept VARACHAR2) IS SELECT ename,salary FROM emp WHERE deptno=p_dept ORDER BY ename

v_tot_salary EMP.SALARY%TYPE;
BEGIN
FOR r_dept IN c_dept
LOOP
DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname);
v_tot_salary:=0;
FOR r_emp IN c_emp(r_dept.deptno)
LOOP
DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary);
v_tot_salary:=v_tot_salary+v_salary;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary);
END LOOP;
END;
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3924.html NewsArticle oracle动态游标,oracle游标 declare v_col1 varchar2(254); v_col2 varchar2(254); v_sql varchar2(1024); type my_cursor is ref cursor; v_cur my_cursor; begin v_sql := 'select :1,:2 from dual where 1 = :3'; open v_cur for v_sql using 'col...
评论暂时关闭