oracle动态游标,oracle游标
declarev_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的属性包含:游标的属性
你用Oracle 当前的用户是否创建了这张表,如果没有。。。那就是你没有建表的原因了还有可能你的表不是建立在当前的用户模式下,比如你的是建立在用户Scott模式下则你的语句应该这样写cursor curSort1 is select 服务类型 from scott.tabname order by 编码;
在大多数时候我们在设计程序的时候都遵循下面的步骤: 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;