簡體   English   中英

如何獲取此存儲過程以使用XML文件?

[英]How do i get this stored procedure to work with an XML file?

嘗試使用存儲過程從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;
/

嘗試將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表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM