您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        本篇内容介绍了“怎么理解edb中的package”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创建package
兼容Oracle语法
create or replace package pk_demo
as
  var_pk_demo_1 number;
  function func_demo() return number;
  procedure proc_demo();
end pk_demo;
create or replace package body pk_demo 
as
  function func_demo() return number
  AS
    BEGIN
      var_pk_demo_1 := 100;
      return var_pk_demo_1;
    END;
  procedure proc_demo() 
  AS
    ret number;
    BEGIN
      select func_demo() into ret;
      var_pk_demo_1 := 200;
      dbms_output.put_line('var_pk_demo_1 := '||var_pk_demo_1||',ret = '||ret);
    END;
END pk_demo;元数据
1.存储组织结构
pg_namespace
postgres=# \d pg_namespace
                Table "pg_catalog.pg_namespace"
      Column      |   Type    | Collation | Nullable | Default 
------------------+-----------+-----------+----------+---------
 nspname          | name      |           | not null | 
 nspowner         | oid       |           | not null | 
 nspparent        | oid       |           | not null | 
 nspobjecttype    | oid       |           | not null | 
 nspforeignserver | oid       |           | not null | 
 nspsecdef        | boolean   |           | not null | 
 nspremoteschema  | text      |           |          | 
 nspheadsrc       | text      |           |          | 
 nspbodysrc       | text      |           |          | 
 nspacl           | aclitem[] |           |          | 
Indexes:
    "pg_namespace_nspname_index" UNIQUE, btree (nspname, nspparent)
    "pg_namespace_oid_index" UNIQUE, btree (oid)
postgres=# select * from pg_namespace where nspname='pk_demo';
 nspname | nspowner | nspparent | nspobjecttype | nspforeignserver | nspsecdef | nspremoteschema |     nspheadsrc      |     nspbodysrc      | nspacl 
---------+----------+-----------+---------------+------------------+-----------+-----------------+---------------------+---------------------+--------
 pk_demo |       10 |      2200 |             0 |                0 | t         |                 |                    +|                    +| 
         |          |           |               |                  |           |                 |   @VARIABLE 16462@;+|   @FUNCTION 16463@;+| 
         |          |           |               |                  |           |                 |   @FUNCTION 16463@;+|                    +| 
         |          |           |               |                  |           |                 |   @FUNCTION 16464@;+|   @FUNCTION 16464@;+| 
         |          |           |               |                  |           |                 |                     |                     | 
(1 row)
postgres=# select * from pg_user where usesysid=10;
   usename    | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useaccountstatus | uselockdate | usepasswordexpire | useconfig 
--------------+----------+-------------+----------+---------+--------------+----------+----------+------------------+-------------+-------------------+-----------
 enterprisedb |       10 | t           | t        | t       | t            | ******** |          |                0 |             |                   | 
(1 row)
postgres=# select * from pg_namespace where oid=2200;
 nspname | nspowner | nspparent | nspobjecttype | nspforeignserver | nspsecdef | nspremoteschema | nspheadsrc | nspbodysrc |                     nspacl                      
---------+----------+-----------+---------------+------------------+-----------+-----------------+------------+------------+-------------------------------------------------
 public  |       10 |         0 |             0 |                0 | f         |                 |            |            | {enterprisedb=UC/enterprisedb,=UC/enterprisedb}
(1 row)2.变量
edb_variable
postgres=# \d edb_var* Table "pg_catalog.edb_variable" Column | Type | Collation | Nullable | Default ------------------+---------+-----------+----------+--------- varname | name | | not null | varpackage | oid | | not null | vartype | oid | | not null | vartypmod | integer | | not null | varaccess | "char" | | not null | varisconst | boolean | | not null | varseq | integer | | not null | varerrcode | integer | | not null | varsrc | text | | | varexceptionname | text | | | Indexes: "pg_variable_oid_index" UNIQUE, btree (oid) "pg_variable_varname_pkg_index" UNIQUE, btree (varpackage, varname) postgres=# select * from edb_variable where oid=16462; varname | varpackage | vartype | vartypmod | varaccess | varisconst | varseq | varerrcode | varsrc | varexceptionname ---------------+------------+---------+-----------+-----------+------------+--------+------------+--------+------------------ var_pk_demo_1 | 16454 | 1700 | -1 | + | f | 1 | 0 | | (1 row)
3.函数/过程
pg_proc
postgres=# \d pg_proc Table "pg_catalog.pg_proc" Column | Type | Collation | Nullable | Default ---------------------+--------------+-----------+----------+--------- proname | name | | not null | pronamespace | oid | | not null | proowner | oid | | not null | prolang | oid | | not null | procost | real | | not null | prorows | real | | not null | provariadic | oid | | not null | protransform | regproc | | not null | proisagg | boolean | | not null | proiswindow | boolean | | not null | prosecdef | boolean | | not null | proleakproof | boolean | | not null | proisstrict | boolean | | not null | proretset | boolean | | not null | proisweak | boolean | | not null | provolatile | "char" | | not null | proparallel | "char" | | not null | protype | "char" | | not null | proaccess | "char" | | not null | pronargs | smallint | | not null | pronargdefaults | smallint | | not null | prolineno | integer | | not null | prorettype | oid | | not null | proargtypes | oidvector | | not null | promemberattrs | text | | | proallargtypes | oid[] | | | proargmodes | "char"[] | | | proargdeclaredmodes | "char"[] | | | proargnames | text[] | | | proargdefaults | pg_node_tree | | | protrftypes | oid[] | | | prosrc | text | | not null | probin | text | | | proconfig | text[] | | | proacl | aclitem[] | | | Indexes: "pg_proc_oid_index" UNIQUE, btree (oid) "pg_proc_proname_args_nsp_index" UNIQUE, btree (proname, protype, proargtypes, pronamespace) postgres=# select proname,pronamespace from pg_proc where oid=16463; proname | pronamespace -----------+-------------- func_demo | 16454 (1 row) postgres=# select proname,pronamespace from pg_proc where oid=16464; proname | pronamespace -----------+-------------- proc_demo | 16454 (1 row) postgres=#
4.相关视图:edb_pkgelements、edb_package
postgres=# \d edb_pkg*
                View "pg_catalog.edb_pkgelements"
   Column    |       Type        | Collation | Nullable | Default 
-------------+-------------------+-----------+----------+---------
 packageoid  | oid               |           |          | 
 eltname     | name              |           |          | 
 visibilty   | "char"            |           |          | 
 eltclass    | character varying |           |          | 
 eltdatatype | oid               |           |          | 
 nargs       | smallint          |           |          | 
 argtypes    | oidvector         |           |          | 
 argmodes    | "char"[]          |           |          | 
 argnames    | text[]            |           |          | 
 argdefvals  | pg_node_tree      |           |          | 
postgres=# select * from edb_pkgelements where packageoid = 16454;
 packageoid |    eltname    | visibilty | eltclass | eltdatatype | nargs | argtypes | argmodes | argnames | argdefvals 
------------+---------------+-----------+----------+-------------+-------+----------+----------+----------+------------
      16454 | proc_demo     | +         | P        |        2278 |     0 |          |          |          | 
      16454 | var_pk_demo_1 | +         | V        |        1700 |       |          |          |          | 
      16454 | func_demo     | +         | F        |        1700 |     0 |          |          |          | 
(3 rows)
postgres=# 
postgres=# select * from pg_views where viewname='edb_pkgelements';
 schemaname |    viewname     |  viewowner   |                         definition                         
------------+-----------------+--------------+------------------------------------------------------------
 pg_catalog | edb_pkgelements | enterprisedb |  SELECT edb_variable.varpackage AS packageoid,            +
            |                 |              |     edb_variable.varname AS eltname,                      +
            |                 |              |     edb_variable.varaccess AS visibilty,                  +
            |                 |              |     'V'::character varying AS eltclass,                   +
            |                 |              |     edb_variable.vartype AS eltdatatype,                  +
            |                 |              |     NULL::smallint AS nargs,                              +
            |                 |              |     NULL::oidvector AS argtypes,                          +
            |                 |              |     NULL::"char"[] AS argmodes,                           +
            |                 |              |     NULL::text[] AS argnames,                             +
            |                 |              |     NULL::pg_node_tree AS argdefvals                      +
            |                 |              |    FROM edb_variable                                      +
            |                 |              | UNION                                                     +
            |                 |              |  SELECT pg_proc.pronamespace AS packageoid,               +
            |                 |              |     pg_proc.proname AS eltname,                           +
            |                 |              |     pg_proc.proaccess AS visibilty,                       +
            |                 |              |         DECODE(  (pg_proc.protype)::character varying     +
            |                 |              |             , ('0'::text)::character varying              +
            |                 |              |             , ('F'::text)::character varying              +
            |                 |              |             , ('1'::text)::character varying              +
            |                 |              |             , ('P'::text)::character varying              +
            |                 |              |             , NULL::character varying                     +
            |                 |              |         ) AS eltclass,                                    +
            |                 |              |     pg_proc.prorettype AS eltdatatype,                    +
            |                 |              |     pg_proc.pronargs AS nargs,                            +
            |                 |              |     pg_proc.proargtypes AS argtypes,                      +
            |                 |              |     pg_proc.proargmodes AS argmodes,                      +
            |                 |              |     pg_proc.proargnames AS argnames,                      +
            |                 |              |     pg_proc.proargdefaults AS argdefvals                  +
            |                 |              |    FROM pg_proc                                           +
            |                 |              |   WHERE (pg_proc.pronamespace IN ( SELECT pg_namespace.oid+
            |                 |              |            FROM pg_namespace                              +
            |                 |              |           WHERE (pg_namespace.nspparent <> (0)::oid)));
(1 row)
postgres=# select * from pg_views where viewname='edb_package';
 schemaname |  viewname   |  viewowner   |                                         definition                                          
------------+-------------+--------------+---------------------------------------------------------------------------------------------
 pg_catalog | edb_package | enterprisedb |  SELECT pg_namespace.oid,                                                                  +
            |             |              |     pg_namespace.nspname AS pkgname,                                                       +
            |             |              |     pg_namespace.nspparent AS pkgnamespace,                                                +
            |             |              |     pg_namespace.nspowner AS pkgowner,                                                     +
            |             |              |     edb_get_packageheaddef(pg_namespace.oid) AS pkgheadsrc,                                +
            |             |              |     edb_get_packagebodydef(pg_namespace.oid) AS pkgbodysrc,                                +
            |             |              |     'P'::character(1) AS pkgproperties,                                                    +
            |             |              |     pg_namespace.nspacl AS pkgacl,                                                         +
            |             |              |     pg_namespace.cmin,                                                                     +
            |             |              |     pg_namespace.xmin,                                                                     +
            |             |              |     pg_namespace.cmax,                                                                     +
            |             |              |     pg_namespace.xmax,                                                                     +
            |             |              |     pg_namespace.ctid                                                                      +
            |             |              |    FROM pg_namespace                                                                       +
            |             |              |   WHERE ((pg_namespace.nspparent <> (0)::oid) AND (pg_namespace.nspobjecttype = (0)::oid));
(1 row)
postgres=# select * from edb_package where pkgname='pk_demo';
  oid  | pkgname | pkgnamespace | pkgowner |                 pkgheadsrc                  |                                   pkgbodysrc                                    | pkgproperties | pkgacl | cmin | xmin | cmax | xmax |  ctid  
-------+---------+--------------+----------+---------------------------------------------+---------------------------------------------------------------------------------+---------------+--------+------+------+------+------+--------
 16454 | pk_demo |         2200 |       10 | CREATE OR REPLACE PACKAGE public.pk_demo IS+| CREATE OR REPLACE PACKAGE BODY public.pk_demo IS                               +| P             |        |    2 | 1231 |    2 |    0 | (0,29)
       |         |              |          |   var_pk_demo_1 numeric;                   +|   FUNCTION func_demo() RETURN numeric IS                                       +|               |        |      |      |      |      | 
       |         |              |          |   FUNCTION func_demo() RETURN numeric;     +|     BEGIN                                                                      +|               |        |      |      |      |      | 
       |         |              |          |   PROCEDURE proc_demo();                   +|       var_pk_demo_1 := 100;                                                    +|               |        |      |      |      |      | 
       |         |              |          | END                                         |       return var_pk_demo_1;                                                    +|               |        |      |      |      |      | 
       |         |              |          |                                             |     END;                                                                       +|               |        |      |      |      |      | 
       |         |              |          |                                             |                                                                                +|               |        |      |      |      |      | 
       |         |              |          |                                             |   PROCEDURE proc_demo() IS                                                     +|               |        |      |      |      |      | 
       |         |              |          |                                             |     ret number;                                                                +|               |        |      |      |      |      | 
       |         |              |          |                                             |     BEGIN                                                                      +|               |        |      |      |      |      | 
       |         |              |          |                                             |       select func_demo() into ret;                                             +|               |        |      |      |      |      | 
       |         |              |          |                                             |       var_pk_demo_1 := 200;                                                    +|               |        |      |      |      |      | 
       |         |              |          |                                             |       dbms_output.put_line('var_pk_demo_1 := '||var_pk_demo_1||',ret = '||ret);+|               |        |      |      |      |      | 
       |         |              |          |                                             |     END;                                                                       +|               |        |      |      |      |      | 
       |         |              |          |                                             | END                                                                             |               |        |      |      |      |      | 
(1 row)“怎么理解edb中的package”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。