• 【PL/SQL练习】命名块: 存储过程、函数、触发器、包


    创建时定义名称 2、可以被Oracle server 保存 3、可以被任何程序调用 4、可以被共享

    存储过程:

    1、不带参数的存储过程:

    SQL> create or replace procedure proc1 is
      2  
      3    v_ename emp.ename%type;
      4    v_sal  emp.sal%type ;
      5  
      6    begin
      7        select ename,sal into v_ename,v_sal from emp where empno=&no;
      8        dbms_output.put_line('Name is : '||v_ename||' , '||'Salary is : '||v_sal);
      9    exception
     10        when no_data_found then
     11           dbms_output.put_line('you number is not crrect ,please input again !');
     12        when others then
     13           dbms_output.put_line('Others error !');
     14    end;
    SQL> exec proc1;         //执行存储过程
    SQL> create or replace procedure proc1 is
      2  
      3    v_ename emp.ename%type;
      4    v_sal  emp.sal%type ;
      5  
      6    begin
      7        select ename,sal into v_ename,v_sal from emp where empno=&no;
      8        dbms_output.put_line('Name is : '||v_ename||' , '||'Salary is : '||v_sal);
      9    exception
     10        when no_data_found then
     11           dbms_output.put_line('you number is not crrect ,please input again !');
     12        when others then
     13           dbms_output.put_line('Others error !');
     14    end;

    通过数据字典查看procedure信息:

    带有参数的存储过程: 参数定义中,IN、OUT和IN OUT代表参数的三种不同模式:

    IN:当调用存储过程时,该模式的形参接收对应实参的值,并且该是只读的,即不能被修改。默认为IN。   OUT:该形参被认为只能写,既只能为其赋值。在存储过程中不能读它的值。返回时,将该形参值传给相应的实参。

    IN OUT:都允许

    ①in

    SQL> create or replace procedure ins_dept
      2     (v_deptno in number,v_dname  varchar2, v_loc in varchar2) is
      3  
      4  e_dept_err    exception;
      5  pragma exception_init(e_dept_err ,-0001);
      6  begin
      7    insert into dept values (v_deptno,v_dname,v_loc);
      8    commit;
      9  exception
     10    when e_dept_err then
     11      dbms_output.put_line('You deptno is not unique ,Please input unique deptno number !');
     12    when others then
     13       dbms_output.put_line('Others error !');
     14  end;

    ②OUT:

    SQL> create or replace procedure proc2
      2   ( v_empno in number ,v_ename out varchar2,v_sal out number)
      3  is
      4  
      5  begin
      6  
      7    select ename,sal into v_ename,v_sal  from emp where empno=v_empno;
      8  
      9    dbms_output.put_line ('Employee name is: '||v_ename);
     10  
     11    dbms_output.put_line ('Employee salary is: '||v_sal);
     12  exception
     13     when no_data_found then
     14       dbms_output.put_line('Employee ID is error !');
     15     when others then
     16        dbms_output.put_line('Others error !');
     17  end;
    在系统下运行:
    SQL> var name varchar2(10);
    SQL> var sal  number;
    SQL> exec proc2(7369,:name,:sal);
    PL/SQL procedure successfully completed
    name
    ---------
    SMITH
    sal
    ---------
    6800
    
    通过PLSQL 块运行:
    SQL> declare
      2      v_name emp.ename%type;
      3      v_sal emp.sal%type;
      4      begin
      5       proc2(7369,v_name,v_sal);
      6      end;


     

    3.IN-OUT:

    SQL> create or replace procedure proc3
      2   (v_empno in out number ,v_ename out varchar2,v_sal out number)
      3  as
      4  begin
      5    select empno,ename,sal into v_empno,v_ename,v_sal from emp where empno=v_empno;
      6     dbms_output.put_line ('Employee ID is:  '||v_empno);
      7     dbms_output.put_line ('Employee name is: '||v_ename);
      8     dbms_output.put_line ('Employee salary is: '||v_sal);
      9  exception
     10       when no_data_found then
     11         dbms_output.put_line('Employee ID is error !');
     12       when others then
     13          dbms_output.put_line('Others error !');
     14  end;
     15  /
    Procedure created
    
    执行存储过程:
    
    SQL> declare
      2    v_empno emp.empno%type;
      3    v_ename emp.ename%type;
      4    v_sal   emp.sal%type;
      5  
      6  begin
      7     v_empno := &n;
      8    proc3(v_empno,v_ename,v_sal);
      9  
     10  end;
  • 相关阅读:
    ZIP压缩算法详细分析及解压实例解释
    nyoj 269 VF
    骨牌覆盖问题 KxM
    骨牌覆盖问题
    省赛总结...
    归并排序求逆序对
    「JLOI2014」松鼠的新家
    「JSOI2011」任务调度
    「JSOI2010」找零钱的洁癖
    「JSOI2011」棒棒糖
  • 原文地址:https://www.cnblogs.com/tomatoes-/p/6104480.html
Copyright © 2020-2023  润新知