ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 过程

过程

原创 Linux操作系统 作者:hjianping 时间:2011-04-26 19:35:33 0 删除 编辑

create or replace procedure 过程名称
          (argument1 [mode1] datatype1,argument2 [mode2] datatype2,...)
is [as]
PL/SQL Block;

1、建立无参数过程
create or replace procedure out_time
is
begin
     dbms_output.put_line(sysdate);
end;
/
execute out_time;

2、建立带有输入参数的过程
create or replace procedure add_emp(
        empno scott.emp.empno%type,
        ename scott.emp.ename%type,
        job scott.emp.job%type,
        mgr scott.emp.mgr%type,
        hiredate scott.emp.hiredate%type,
        sal scott.emp.sal%type,
        comm scott.emp.comm%type,
        deptno scott.emp.deptno%type)
is
begin
     insert into scott.emp
            values(empno,ename,job,mgr,hiredate,sal,comm,deptno);
end;
/
execute add_emp(8000,'hjp','manager',8000,'01-10月-08',5000,1000,20);

3、建立带有输出参数的过程
create or replace procedure update_sal
        (eno number,salary number,name out varchar2)
is
begin
     update scott.emp set sal=salary where empno=eno returning ename into name;
end;
/

declare
       v_name scott.emp.ename%type;
begin
     update_sal(8000,4000,v_name);
     dbms_output.put_line(v_name);
end;

4、建立带有输入输出参数的过程
create or replace procedure divide
        (num1 in out number,num2 in out number)
is
  v1 number;
  v2 number;
begin
     v1:=trunc(num1/num2);
     v2:=mod(num1,num2);
     num1:=v1;
     num2:=v2;
end;
/
declare
       n1 number:=&n1;
       n2 number:=&n2;
begin
     divide(n1,n2);
     dbms_output.put_line('商:'||n1||',余数:'||n2);
end;

5、使用记录变量作为输入参数
create or replace procedure add_dept(dept_record scott.dept%rowtype)
is
begin
     insert into scott.dept values dept_record;
end;
/
declare
  dept_record scott.dept%rowtype;
begin
     dept_record.deptno:=&dno;
     dept_record.dname:='&name';
     dept_record.loc:='&loc';

     add_dept(dept_record);
end;

6、使用记录变量作为输出参数
create or replace procedure get_employee
        (eno scott.emp.empno%type,emp_record out scott.emp%rowtype)
is
begin
     select * into emp_record from scott.emp where empno=eno;
exception
         when no_data_found then
              raise_application_error(-2000,'雇员不存在');
end;
/
declare
  emp_record scott.emp%rowtype;
begin
     get_employee(&eno,emp_record);
     dbms_output.put_line(emp_record.ename||','||emp_record.sal);
end;

7、使用集合变量作为输入参数
create type deptno_table_type is table of number(2);
/
create type dname_table_type is table of varchar2(10);
/
create type loc_table_type is table of varchar2(20);
/
create or replace procedure add_department
      (deptno_table deptno_table_type,
       dname_table dname_table_type,
       loc_table loc_table_type)
is
begin
     forall i in 1..deptno_table.count
        insert into scott.temp_dept values (deptno_table(i),dname_table(i),loc_table(i));
end;
/
declare
  deptno_table deptno_table_type:=deptno_table_type(60,70,80);
  dname_table dname_table_type:=dname_table_type('ALC','PERS','PCS');
  loc_table loc_table_type:=loc_table_type('SZ','WH','GD');
begin
     add_department(deptno_table,dname_table,loc_table);
end;

8、使用集合变量作为输出参数
create type ename_table_type is table of varchar2(10);
/
create type job_table_type is table of varchar2(10);
/
create or replace procedure get_emp
  (dno number,ename_table out ename_table_type,job_table out job_table_type)
is
begin
     select ename,job bulk collect into ename_table,job_table
            from scott.emp where deptno=dno;
end;
/
declare
  ename_table ename_table_type;
  job_table job_table_type;
begin
     get_emp(&dno,ename_table,job_table);
     for i in 1..ename_table.count loop
         dbms_output.put_line('姓名:'||ename_table(i)||',岗位:'||job_table(i));
     end loop;
end;

9、维护过程
授权system能运行em_ins
grant execute on em_ins to system;

删除过程
drop procedure 过程名;

显示编译错误
show errors;

确定无效过程
select object_name from user_objects where object_type='PROCEDURE' and status='INVALID';

编译过程
alter procedure get_emp COMPILE;

查看过程代码
select text from user_source where name='GET_EMP';

例
create or replace procedure em_ins(v_name varchar2) as
  v_empno number(4);
begin
  select max(empno)+1 into v_empno from scott.emp;
  insert into scott.emp(empno, ename,job,mgr,hiredate,sal,comm,deptno)
  values(v_empno,v_name,null,null,sysdate,null,null,20);
  commit;
end em_ins;

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17012874/viewspace-693788/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 游标3
下一篇: 函数
请登录后发表评论 登录
全部评论

注册时间:2011-04-24

  • 博文量
    80
  • 访问量
    86745