背景
封装函数主要是为了隐藏函数体的内容(业务逻辑),这个在Oracle里面是通过package来实现的.
在PostgreSQL里面, 原生是不带这个功能的, 但是EnterpriseDB的AS版本支持这一操作,
通过edbwrap可以实现代码的封装.
另一方面,PostgreSQL可以找一下社区版本的函数封装插件。
例如 :
未封装的函数通过pg_proc.prosrc可以查看它的源码.
edb=# SELECT prosrc FROM pg_proc WHERE proname = 'list_emp'; prosrc -------------------------------------------------------------- v_empno NUMBER(4); v_ename VARCHAR2(10); CURSOR emp_cur IS SELECT empno, ename FROM emp ORDER BY empno; BEGIN OPEN emp_cur; DBMS_OUTPUT.PUT_LINE('EMPNO ENAME'); DBMS_OUTPUT.PUT_LINE('----- -------'); LOOP FETCH emp_cur INTO v_empno, v_ename; EXIT WHEN emp_cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_empno || ' ' || v_ename); END LOOP; CLOSE emp_cur; END (1 row) edb=# quit
复制
使用edbwrap封装这个创建函数的文件
[bash] edbwrap -i listemp.sql EDB*Wrap Utility: Release 8.4.3.2 Copyright (c) 2004-2010 EnterpriseDB Corporation. All Rights Reserved. Using encoding UTF8 for input Processing listemp.sql to listemp.plb Examining the contents of the output file (listemp.plb) file reveals that the code is obfuscated:
复制
封装后就变成这样了.
[bash] cat listemp.plb $__EDBwrapped__$ UTF8 d+6DL30RVaGjYMIzkuoSzAQgtBw7MhYFuAFkBsfYfhdJ0rjwBv+bHr1FCyH6j9SgH movU+bYI+jR+hR2jbzq3sovHKEyZIp9y3/GckbQgualRhIlGpyWfE0dltDUpkYRLN /OUXmk0/P4H6EI98sAHevGDhOWI+58DjJ44qhZ+l5NNEVxbWDztpb/s5sdx4660qQ Ozx3/gh8VkqS2JbcxYMpjmrwVr6fAXfb68Ml9mW2Hl7fNtxcb5kjSzXvfWR2XYzJf KFNrEhbL1DTVlSEC5wE6lGlwhYvXOf22m1R2IFns0MtF9fwcnBWAs1YqjR00j6+fc er/f/efAFh4= $__EDBwrapped__$
复制
使用封装后的代码创建函数
[bash] edb-psql edb Welcome to edb-psql 8.4.3.2, the EnterpriseDB interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with edb-psql commands \g or terminate with semicolon to execute query \q to quit edb=# \i listemp.plb CREATE PROCEDURE
复制
那么再查看pg_proc.prosrc就变成封装后的代码了
edb=# SELECT prosrc FROM pg_proc WHERE proname = 'list_emp'; prosrc ---------------------------------------------------------------- $__EDBwrapped__$ UTF8 dw4B9Tz69J3WOsy0GgYJQa+G2sLZ3IOyxS8pDyuOTFuiYe/EXiEatwwG3h3tdJk ea+AIp35dS/4idbN8wpegM3s994dQ3R97NgNHfvTQnO2vtd4wQtsQ/Zc4v4Lhfj nlV+A4UpHI5oQEnXeAch2LcRD87hkU0uo1ESeQV8IrXaj9BsZr+ueROnwhGs/Ec pva/tRV4m9RusFn0wyr38u4Z8w4dfnPW184Y3o6It4b3aH07WxTkWrMLmOZW1jJ Nu6u4o+ezO64G9QKPazgehslv4JB9NQnuocActfDSPMY7R7anmgw $__EDBwrapped__$ (1 row)
复制
参考
Postgres Plus Advanced Server Oracle Compatibility Developer’s Guide
http://www.enterprisedb.com/docs/en/9.1/oracompat/Postgres_Plus_Advanced_Server_Oracle_Compatibility_Guide-194.htm#P19537_909450
文章来源:https://billtian.github.io/digoal.blog/2012/06/06/01.html
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
383次阅读
2025-04-21 16:58:09
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
353次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
331次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
294次阅读
2025-04-07 12:14:29
postgresql+patroni+etcd高可用安装
necessary
166次阅读
2025-03-28 10:11:23
从 Oracle 到 PostgreSQL迁移成本评估揭秘
梧桐
152次阅读
2025-03-27 17:21:42
手把手教你在 openKylin 上部署 IvorySQL 4.4
严少安
150次阅读
2025-03-27 20:41:28
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
146次阅读
2025-04-14 15:58:34
墨天轮PostgreSQL认证证书快递已发(2025年3月批)
墨天轮小教习
126次阅读
2025-04-03 11:43:25
SQL 优化之 OR 子句改写
xiongcc
91次阅读
2025-04-21 00:08:06