注意:定义游标遍历的类型要加%,有多个输出时使用连接符: ||,赋值::=
执行存储过程:exec 存储过程名/存储过程名(‘参数’);需要在屏幕上显示:set serveroutput on;
create or replace procedure proce1(empNo number, sals int) is --默认是in类型(还有out、inout)
--declare 存储过程和函数已经取消 declare 的使用
v_ename varchar2(20); --变量定义列表,没有则不写
v_sal int := sals;
v_a int := 3;
v_b int := 5;
begin
select ename into v_ename from emp where empno = empNo; --把查询到的值放入v_ename中
if(v_a > v_b) then
dbms_output.put_line('v_a=' || v_a);
else
dbms_output.put_line('v_b=' || v_b);
end if;
while(v_sal) loop
dbms_output.put_line('empno:' || v_ename);
v_sal := v_sal - 1;
end loop;
exception --异常处理
when no_data_found then
dbms_output.put_line('input error'); --如果没有发现数据就执行以下语句
end proce1;
游标用法
create or replace procedure cursor_proce is
cursor cursor_emp is select * from emp; --定义游标
emp_row cursor_emp %rowtype; --定义emp_row为遍历emp的每一行,必须加上%rowtype
begin
dbms_output.put_line('empno'||' '||'ename');
for emp_row in cursor_emp loop
dbms_output.put_line(emp_row.empno||' '||emp_row.ename);
end loop;
exception --异常处理
when no_data_found then --如果没有发现数据就执行以下语句
dbms_output.put_line('没有发现数据');
end cursor_proce;