zoukankan      html  css  js  c++  java
  • ORACLE之PACKAGE-包、存储过程、函数

    1,简单的包

    创建包规范:

    create or replace package pack_test1 is
      -- 定义过程1
      procedure p_test1(p_1 in varchar2);
      -- 定义函数1
      function f_test1(p_1 in varchar2) return varchar2;
    end pack_test1;

    创建包体:

    create or replace package body pack_test1 is
      -- 包全局变量1
      v_param1 varchar(20) := 'default';
    
      -- 实现过程1
      procedure p_test1(p_1 in varchar2) is
      begin
    
        dbms_output.put_line('p_1的值为:'|| p_1);
        dbms_output.put_line('全局变量的值为:'||v_param1);
        -- 改变全局变量
        v_param1 := p_1;
        dbms_output.put_line('改变后的全局变量值为:'||v_param1);
    
      end;
    
      -- 实现函数1
      function f_test1(p_1 in varchar2) return varchar2 is
        v_rt varchar2(50);
      begin
        dbms_output.put_line('获取的全局变量值为:'||v_param1);
    
        v_rt := v_param1||'-'||p_1;
    
        dbms_output.put_line('返回值为:'||v_rt);
    
        return v_rt;
      end f_test1;
    
    
    end pack_test1;
    ---------------------

    调用包:

    在一般的sql窗口可以使用以下方法:

    -- 调用过程
    call pack_test1.p_test1('参数1');
    
    -- 调用函数
    select pack_test1.f_test1('参数2') from dual;

    在命令窗口可以使用:

    exec pack_test1.p_test1('参数1');--执行此包 存在版本问题 看不到输出

    2,包间调用

    刚学pl/sql编程,写了两个package。pkg_temp_fn和pkg_temp_fn2。内容涉及pl/sql基本语法,游标,存储过程(in,out),函数(有返回值)。

    • pkg_temp_fn内有一个function f_getdept(v_deptid number) return VARCHAR2和一个procedure p_getinfo(v_mapid NUMBER)

    创建包规范

    1 create or replace package pkg_temp_fn is
    2   function f_getdept(v_deptid number) return VARCHAR2;
    3   --reference pkg_temp_fn2
    4   procedure p_getinfo(v_mapid NUMBER/*,v_pname VARCHAR2(20),v_deptno VARCHAR2(15)*/);
    5  -- procedure p_main_process;
    6 end pkg_temp_fn;
    7 --3/24/2016
    8 --var map_id number;
    9 --exec pkg_temp_fn.p_getinfo(&map_id);调用方法

    创建包体

     1 create or replace package body pkg_temp_fn
     2 is
     3   function f_getdept(v_deptid number) return VARCHAR2
     4   is
     5     deptno varchar2(15);
     6     begin
     7         select y.dept_no into deptno from t_fn_dept y where y.dept_id=v_deptid;
     8       return deptno;
     9     end f_getdept;
    10 
    11   procedure p_getinfo(v_mapid NUMBER)
    12     is
    13       cursor xing is select x.person_name,x.dept from t_fn_person x where x.map_id=v_mapid;
    14       pname VARCHAR2(20);
    15       pdept number;
    16       v_deptno VARCHAR2(15);
    17       begin
    18         open xing;
    19         loop
    20           fetch xing into pname,pdept;
    21           exit when xing%notfound;
    22           v_deptno:=f_getdept(pdept);--call function
    23           dbms_output.put_line(pname||'''s dept is :'||v_deptno);
    24         end loop;
    25         close xing;
    26       end p_getinfo;
    27 end pkg_temp_fn;
    • kg_temp_fn2内有一个function f_getdept(v_deptid number) return VARCHAR2、一个procedure p_getinfo(v_mapid NUMBER,v_pname out VARCHAR2,v_deptno out VARCHAR2),一个procedure p_main_process(v_mapid NUMBER)。

    创建包规范

    1 create or replace package pkg_temp_fn2 is
    2   function f_getdept(v_deptid number) return VARCHAR2;
    3   procedure p_getinfo(v_mapid NUMBER,v_pname out VARCHAR2,v_deptno out VARCHAR2);
    4   procedure p_main_process(v_mapid NUMBER);
    5 end pkg_temp_fn2;
    6 --3/24/2016
    7 --var map_id number;
    8 --exec pkg_temp_fn2.p_main_process(&map_id);调用方法

    创建包体

     1 create or replace package body pkg_temp_fn2
     2 is
     3   function f_getdept(v_deptid number) return VARCHAR2
     4   is
     5     deptno varchar2(15);
     6     begin
     7         select y.dept_no into deptno from t_fn_dept y where y.dept_id=v_deptid;
     8       return deptno;
     9     end f_getdept;
    10 
    11   procedure p_getinfo(v_mapid in NUMBER,v_pname out VARCHAR2,v_deptno out VARCHAR2)
    12     is
    13       cursor xing is select x.person_name,x.dept from t_fn_person x where x.map_id=v_mapid;
    14       pdept number;
    15       begin
    16         open xing;
    17         loop
    18           fetch xing into v_pname,pdept;
    19           exit when xing%notfound;
    20           v_deptno:=f_getdept(pdept);--
    21           --dbms_output.put_line(pname||'''s dept is :'||v_deptno);
    22         end loop;
    23         close xing;
    24       end p_getinfo;
    25    procedure p_main_process(v_mapid NUMBER)
    26      is
    27      v_pname  VARCHAR2(20);
    28      v_deptno  varchar2(15);
    29      begin
    30        p_getinfo(v_mapid,v_pname,v_deptno);
    31        dbms_output.put_line(v_pname||'''s dept is :'||v_deptno);
    32      end p_main_process;
    33 end pkg_temp_fn2;

    ps:

    定义变量或者参数的的时候,类型不要有括号,否则报错。

  • 相关阅读:
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    449. Serialize and Deserialize BST
    114. Flatten Binary Tree to Linked List
    199. Binary Tree Right Side View
    173. Binary Search Tree Iterator
    98. Validate Binary Search Tree
    965. Univalued Binary Tree
    589. N-ary Tree Preorder Traversal
    eclipse设置总结
  • 原文地址:https://www.cnblogs.com/hoaprox/p/5316444.html
Copyright © 2011-2022 走看看