【问题标题】:How do i get this stored procedure to work with an XML file?如何让这个存储过程与 XML 文件一起使用?
【发布时间】:2018-07-25 14:00:31
【问题描述】:

尝试使用存储过程将一些数据从 xml 文件(由 pega/java 生成)插入到两个表中。不知道我应该如何定义变量或定义光标,因为那里的大多数教程只向您展示如何编写存储过程,从数据库中的其他表写入表......我被卡住的部分被标记了。一种选择是 JAVA 开发人员使用我的存储过程中提供的参数调用我的存储过程并以这种方式推送数据。如果是这种情况,我如何定义光标从哪里提取数据? (提前致谢!)

Create or Replace Procedure Cascade_Load (
a Number,
b Number,
c Number,
d Varchar2,
e Varchar2,
f Number,
g Varchar2,
h Varchar2,
i Timestamp,
j Number,
k Varchar2,
l Date,
m Number,
n Date,
o Number,
p Date,
q Date
)
AS
BEGIN
  IF b is not null
  THEN
  INSERT INTO Value(Value_Id, Product_Id, Data_Source_Id, Unit_CD,         Value_TX, UTC_OFFSET, DATA_DATE, HR_UTC, HR, HR_NUM, DATA_CODE, CREATE_DT, CREATE_USER_ID, MODIFY_DT, MODIFY_USER_ID, EFFECTIVE_DT, INACTIVE_DT)
    VALUES(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q);
  INSERT INTO XML_Load_STAGING(Code, Product_Name, Product_number, Product_Version, Technical_Contact)
    VALUES(a, b, c, d, e);
COMMIT;
   END IF;
END;
/

DECLARE
a Number,
b Number,
c Number,
d Varchar2,
e Varchar2,
f Number,
g Varchar2,
h Varchar2,
i Timestamp,
j Number,
k Varchar2,
l Date,
m Number,
n Date,
o Number,
p Date,
q Date
    CURSOR cXmlHoursLoadCursor IS (SELECT **WHAT DO I SELECT since Im calling from a xml file rather than from a table?**);
BEGIN
  For v in cXmlHoursLoadCursor LOOP
    Cascade_Load(v.a, v.b, v.c, v.d, v.e, v.f, v.g, v.h, v.i, v.j, v.k, v.l, v.m, v.n, v.o, v.p, v.q);
    COMMIT;
  END LOOP;
END;
/

【问题讨论】:

    标签: java sql oracle plsql oracle-pro-c


    【解决方案1】:

    尝试将 XML 文件作为 CTE 批量加载:

        --query the XML Blob using a CTE (pulling from the XML file each time)
        WITH XmlFile (Contents) AS (
        SELECT CONVERT (XML, BulkColumn) 
        FROM OPENROWSET (BULK 'C:\Books.xml', SINGLE_BLOB) AS XmlData
        )
        SELECT *
        FROM XmlFile
        GO
    

    这将向您显示数据的外观以及列名。从那里,您可以像查询任何其他表或视图一样查询“XmlFile”CTE 表。

    【讨论】:

    • 有没有一种方法可以让我在每次将文件放入文件路径时运行此设置?
    • 当然。你以前用过 PowerShell 吗?这就是作为一种工具首先出现在我脑海中的东西。
    • 不,我没有。所以根据我被告知的内容,来自 JAVA 方面的人将通过解析器并调用我的存储过程来传递数据。不知道这将如何工作。也许我错了?
    • Java 也可以使用,如果您在内部拥有这些资源,是的。但是,我无法谈论如何在技术上进行设置。
    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多