oracle cursor
--游标可用于处理多行--显示声明游标declarecursorcur_empisselect*fromemployees;--声明游标v_empemployees%rowtype;v_star_nonumber;v_starvarchar2(100);beginopencur_emp;--打开游标loop...
·
- --游标可用于处理多行
- --显示声明游标
- declare
- cursor cur_emp is select * from employees;--声明游标
- v_emp employees%rowtype;
- v_star_no number;
- v_star varchar2(100) ;
- begin
- open cur_emp;--打开游标
- loop
- fetch cur_emp into v_emp;--获取值
- v_star_no := round(v_emp.salary/1000);
- v_star := null;
- for i in 1..v_star_no
- loop
- v_star := v_star||'*';
- end loop;
- dbms_output.put_line(v_emp.last_name||' is '||v_star||'( salary is: '||v_emp.salary||')');
- exit when cur_emp%notfound;
- end loop;
- close cur_emp;
- end;
- --游标for循环(隐式打开游标,获取游标,关闭游标)
- --形式一
- declare
- cursor cur_emp is select * from employees;
- v_star_no number;
- v_star varchar2(100) ;
- begin
- for rec in cur_emp
- loop
- v_star_no := round(rec.salary/1000);--星号的个数
- v_star := null;--初始化
- for i in 1..v_star_no
- loop
- v_star := v_star||'*';
- end loop;
- dbms_output.put_line(rec.last_name||' is '||v_star||'( salary is: '||rec.salary||')');
- exit when cur_emp%notfound;
- end loop;
- end;
- --形式二
- declare
- v_star_no number;
- v_star varchar2(100) ;
- begin
- for rec in (select * from employees)
- loop
- v_star_no := round(rec.salary/1000);
- v_star := null;
- for i in 1..v_star_no
- loop
- v_star := v_star||'*';
- end loop;
- dbms_output.put_line(rec.last_name||' is '||v_star||'( salary is: '||rec.salary||')');
- exit when cur_emp%notfound;
- end loop;
- end;
- --游标的属性
- --SQL%ROWCOUNT :返回受影响的行数
- --SQL%FOUND :返回值为布尔值,如果一行或多行受sql语句影响,返回true否则为false
- --SQL%NOTFOUND :返回值为布尔值,如果行数受sql语句影响,返回true否则为false
- create table t1 as select * from employees;
- /
- VARIABLE rows_deleted VARCHAR2(30)
- DECLARE
- v_employee_id t1.employee_id%TYPE := 176;
- BEGIN
- DELETE FROM t1
- WHERE
- employee_id = v_employee_id;
- :rows_deleted := (SQL%ROWCOUNT ||' row deleted.');
- END;
- /
- PRINT rows_deleted
- /
- rows_deleted 绑定变量
- 绑定变量是一种减少应用程序在分析查询时将使用的栓锁(也就是锁)数目的可靠方法。
- 软分析比硬分析使用的CPU时间少得多,绑定变量是获得软分析的方法。
- SQL语句中使用串字面值而不是绑定变量使系统冒SQL注入的风险。
- 如果用户输入某些预料不到的字符,如输入引号,SQL语句中的串字面值可能导致失败。
- 不论使用何种环境,不管是PL/SQL、JAVA和JDBC或某些其他语言,使用绑定变量即使不比不使用绑定变量快,至少也是一样快,而且代码容易编写。
- --查询工资大于部门平均工资的员工(运用关联子查询)
- SET SERVEROUTPUT ON
- BEGIN
- FOR rec IN (SELECT e.last_name,e.salary,e.department_id,b.avgsal
- FROM employees e,
- (SELECT department_id, round(avg(salary),2) avgsal
- FROM employees group by department_id
- ) b
- WHERE e.department_id=b.department_id and e.salary>b.avgsal
- )
- LOOP
- dbms_output.put_line(rec.last_name||' works in '||rec.department_id||' and earns more than average salary '||
- rec.avgsal||' the salary is '||rec.salary);
- END LOOP;
- END;
转载于:https://blog.51cto.com/toratto/1133240
更多推荐




所有评论(0)