ORACLE——存储过程(procedure)

--回顾游标
declare
cursor cur is 
select  dname,avg(sal)
from emp inner join dept on dept.deptno=emp.deptno
group by dept.deptno,dname;
v_name dept.dname%type;
v_avg emp.sal%type;
begin
 open cur;
  loop
    fetch cur into v_name,v_avg;
    exit when cur%notfound;
    dbms_output.put_line(v_name||' '||v_avg);
  end loop;
 close cur;
end;

--代码块 3种
--1、匿名块(可以直接嵌套在高级语言中使用)
declare
begin
end;
--java中statement
--st.execute("select * from emp"); --"..."中可以嵌入匿名块
--2、存储过程:取了名字的一个代码块。(关键字:procedure)
--注意:可以有输入参数和输出参数。
--语法:
create or replace procedure 名字
is / as
  --声明变量的位置。。。
begin
  --。。。
end;
--例子:打印emp表中的人数。(创建)
create or replace procedure p_getCount
is
  v_num integer;
begin
  select count(*) into v_num from emp;
  dbms_output.put_line(v_num);
end;
--运行存储过程
--方法1:在sql窗口用匿名块。
begin
 p_getCount;   --可以直接在java中调用
end;
--方法2:在command窗口执行
execute p_getCount;

--把上面的游标代码写成存储过程

create or replace procedure p_cur_test
as
cursor cur is 
select  dname,avg(sal)
from emp inner join dept on dept.deptno=emp.deptno
group by dept.deptno,dname;
v_name dept.dname%type;
v_avg emp.sal%type;
begin
 open cur;
  loop
    fetch cur into v_name,v_avg;
    exit when cur%notfound;
    dbms_output.put_line(v_name||' '||v_avg);
  end loop;
 close cur;
end; 
--调用 
begin  
 p_cur_test; 
end;

--3、函数:取了名字的一个代码块。(关键字:function)
--注意:可以有输入参数,必须有返回值。


猜你喜欢

转载自blog.csdn.net/u010622242/article/details/81066862
今日推荐