2009-12-10 66 views
1

我有一些從某些表生成XML的代碼。我查詢的表格是從XSD文件生成的,該文件描述了我應該生成的XML。問題是表和字段的名稱遵循與架構中不同的命名約定 - 例如,架構中名爲「personID」的元素在數據庫表中將爲「PRSN_ID」。爲了生成輸出,我的代碼如下所示:在XML輸出中重命名標記

Select xmlelement("person", 
     xmlelement("personID",PRSN_ID), 
     xmlelement("personName",PRSN_NAM), 
... 

正如你所想象的,這開始變得單調乏味。我正在尋找更好的解決方案。我知道我可以使用xmlforest爲標籤賦予與選定列相同的名稱,現在我需要一種翻譯方式。例如,如果我產生:

/*the full long list of columns names can be generated so it's an easy copy-paste:*/ 
select xmlelement("PRSN", xmlforest(PRSN_ID,PRSN_NAM,... 

/*produces this:*/ 

<PRSN> 
    <PRSN_ID>1<PRSN_ID/> 
    <PRSN_NAM>BOB<PRSN_NAM/> 
... 

我需要把它翻譯成這樣:

<person> 
    <personID>1</personID> 
    <personName>BOB</personName> 
... 

我怎麼會去甲骨文的PL/SQL做這種翻譯的?我確實有一個生成的映射文件,告訴我「PRSN_ID」應該轉換爲「personID」,但我不確定是否繼續此操作的最佳方式。

回答

3

您不能在重新創建列的表上創建視圖。如果您將它們放在雙引號中,Oracle將執行混合大小寫的列名稱

SELECT PRSN_ID "personID".... 
FROM 
+0

Duh ...我怎麼錯過了? :P是的,我最終可能會這樣做(除非DBA反對爲這些表創建> 90個視圖 - 儘管我可以通過腳本來做到這一點)。感謝你的想法! – FrustratedWithFormsDesigner 2009-12-10 22:08:49

+0

這是我的首選解決方案,但是我無法在數據庫上創建視圖,所以現在我使用Excel宏生成難看的選擇語句,直到DBA創建視圖。 – FrustratedWithFormsDesigner 2009-12-14 20:19:14

0

如果您有一個生成的映射文件,說PRSN_ID應該是personID,那麼爲什麼不使用該映射信息生成第一個SELECT命令呢?

如果該SELECT命令做到了你想要的,那麼生成它會帶走乏味。

+0

您的意思是動態生成查詢?我想過這個。這在當時似乎有點多(映射信息將不得不從它所在的文本文件中提取),儘管如果這是最好的選擇,我仍然可以重新考慮。 還有另一個團隊可能會在輸出中使用與我們當前使用的名稱不同的名稱,所以我認爲最好在生成輸出後進行翻譯。 – FrustratedWithFormsDesigner 2009-12-10 20:42:33