科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件PL/XML—PL/SQL基于XML的脚本

PL/XML—PL/SQL基于XML的脚本

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作者:builder.com.cn 2007年6月5日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

另外一件你需要考虑的事情是,它旨在用于程序间或由开发者访问。你不希望在网络或其它地方传播。那无疑会造成一个安全问题。如果你准备使用这段脚本,考虑将其纳入调用者的权限包中。我会不时考虑它的安全情况。这个问题需要小心对待。

如果你感到好奇,PL/XML代码包括:

  • 包变量
  • 私有包变量
  • 记录类型
  • 记录表
  • 关联数组
  • 过程多重定义
  • XMLType
  • XPath
  • XSLT
  • 循环
  • FOR循环
  • CASE
  • 动态SQL
  • 数据驱动编程
  • 字符串处理
  • 递归编程

所有这些都包含在大约500行代码中(包括空白和注释)。

这样编程确实很有趣。总共用了大约4个小时的时间。

以下是一个更加全面的例子,它说明了许多功能。

这个XML:

<ROOT>
<CMD type="for">
<FOR from="1" to="3">
<CMD type="variable">
<VAR name="$var1$" type="literal" data_type="char">MyValue</VAR>
</CMD>
<CMD type="variable">
<VAR name="$var2$" type="literal" data_type="date" format="DD-MON-YYYY">01-JAN-2005</VAR>
</CMD>
<CMD type="variable">
<VAR name="$var3$" type="literal" data_type="number">1999</VAR>
</CMD>
<CMD type="variable">
<VAR name="$var4$" type="function" data_type="char">
<FUNCTION name="test_func">
<PARAMETER name="parm1">$var1$</PARAMETER>
<PARAMETER name="parm2">def</PARAMETER>
</FUNCTION>
</VAR>
</CMD>
<CMD type="proc">
<PROC name="test_proc">
<PARAMETER name="parm1">$var1$</PARAMETER>
<PARAMETER name="parm2">def</PARAMETER>
</PROC>
</CMD>
</FOR>
</CMD>
<CMD type="for">
<FOR from="1" to="5">
<CMD type="proc">
<PROC name="dbms_output.put_line">
<PARAMETER name="a">Hello World!</PARAMETER>
</PROC>
</CMD>
</FOR>
</CMD>
<CMD type="case">
<WHEN condition="1=2">
<CMD type="proc">
<PROC name="dbms_output.put_line">
<PARAMETER name="a">Condition: 1=2</PARAMETER>
</PROC>
</CMD>
</WHEN>
<WHEN condition="1=1">
<CMD type="proc">
<PROC name="dbms_output.put_line">
<PARAMETER name="a">Condition: 1=1</PARAMETER>
</PROC>
</CMD>
</WHEN>
<WHEN condition="1=3">
<CMD type="proc">
<PROC name="dbms_output.put_line">
<PARAMETER name="a">Condition: 1=3</PARAMETER>
</PROC>
</CMD>
</WHEN>
</CMD>
<CMD type="proc">
<PROC name="dbms_output.put_line">
<PARAMETER name="a">$var4$</PARAMETER>
</PROC>
</CMD>
<CMD type="proc">
<PROC name="dbms_output.put_line">
<PARAMETER name="a" type="context">TO_CHAR(sysdate)</PARAMETER>
</PROC>
</CMD>
<CMD type="variable">
<VAR name="$var5$" type="function" data_type="date" format="dd-mon-yyyy">
<FUNCTION name="test_date_func" />
</VAR>
</CMD>
<CMD type="proc">
<PROC name="dbms_output.put_line">
<PARAMETER name="a" type="literal">$var5$</PARAMETER>
</PROC>
</CMD>
</ROOT>

给定这些测试过程:

CREATE OR REPLACE PROCEDURE test_proc( parm1 IN VARCHAR2, parm2 IN VARCHAR2 )
IS
BEGIN
DBMS_OUTPUT.PUT_LINE( 'Out: ' || parm1 || parm2 );
END;

CREATE OR REPLACE FUNCTION test_func( parm1 IN VARCHAR2, parm2 IN VARCHAR2 )
RETURN VARCHAR2
IS
BEGIN
RETURN 'Data: ' || parm1 || '|' || parm2;
END;

CREATE OR REPLACE FUNCTION test_date_func
RETURN DATE
IS
BEGIN
RETURN sysdate;
END;

生成以下结果:

Out: MyValuedef
Out: MyValuedef
Out: MyValuedef
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Condition: 1=1
Data: MyValue|def
25-AUG-06
25-AUG-06

我正在发布这段脚本的开源代码,以便你可以在适当的地方使用它。你可以在Freshmeat.net订阅,并在我更新代码时得到通知;或访问http://code.google.com/p/pl-xml/获取PL/XML的源代码。

责任编辑:德东

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章