0
我想要做以下操作:使Oracle存儲過程讀取數據庫中的所有數據我正在使用SELECT * FROM base;但這不適用於Oracle。 但也許我需要做得更多不同,因爲我想要做這樣的事情: 我想要有程序,將返回我XML數據的表示形式: 這裏是我用於製作XML文檔的代碼,和我的問題是如何改變它,以便我可以使用此代碼從存儲過程發送數據。讀取Oracle存儲過程並將其表示爲XML
代碼:
require_once('test_xml.php');
$library = array(
'book' => array(
array(
'authorFirst' => 'Mark',
'authorLast' => 'Twain',
'title' => 'The Innocents Abroad'
),
array(
'authorFirst' => 'Charles',
'authorLast' => 'Dickens',
'title' => 'Oliver Twist'
)
)
);
$ArrayToXml=new ArrayToXml();
echo $ArrayToXml->toXml($library);
和類製作XML:
class ArrayToXML
{
/**
* The main function for converting to an XML document.
* Pass in a multi dimensional array and this recrusively loops through and builds up an XML document.
*
* @param array $data
* @param string $rootNodeName - what you want the root node to be - defaultsto data.
* @param SimpleXMLElement $xml - should only be used recursively
* @return string XML
*/
public static function toXml($data, $rootNodeName = 'data', &$xml=null)
{
// turn off compatibility mode as simple xml throws a wobbly if you don't.
if (ini_get('zend.ze1_compatibility_mode') == 1)
{
ini_set ('zend.ze1_compatibility_mode', 0);
}
if (is_null($xml))
{
$xml = simplexml_load_string("<".key($data)."s/>");
}
// loop through the data passed in.
foreach($data as $key => $value)
{
// if numeric key, assume array of rootNodeName elements
if (is_numeric($key))
{
$key = $rootNodeName;
}
// delete any char not allowed in XML element names
$key = preg_replace('/[^a-z0-9\-\_\.\:]/i', '', $key);
// if there is another array found recrusively call this function
if (is_array($value))
{
// create a new node unless this is an array of elements
$node = ArrayToXML::isAssoc($value) ? $xml->addChild($key) : $xml;
// recrusive call - pass $key as the new rootNodeName
ArrayToXML::toXml($value, $key, $node);
}
else
{
// add single node.
$value = htmlentities($value);
$xml->addChild($key,$value);
}
}
// pass back as string. or simple xml object if you want!
return $xml->asXML();
}
// determine if a variable is an associative array
public static function isAssoc($array) {
return (is_array($array) && 0 !== count(array_diff_key($array, array_keys(array_keys($array)))));
}
}
請幫助我不知道如何落實到SELECT *存儲過程的陳述這一點。
謝謝
您可能想要查看DBMS_XMLGEN,它可以將任何查詢轉換爲XML。例如:'從雙選擇'dbms_xmlgen.getxml('select * from dual');'。 – 2012-01-16 02:18:06
嗨,感謝您的回覆。我想只發送XML作爲結果。一切都保持正常。因此,從數據庫中正常讀取,然後將數據數組表示爲XML,並且我有類來表示它。只是不知道如何從存儲過程發回我可以轉換的數據數組。 – Denonth 2012-01-16 10:22:50
我想我沒有直接回答你的問題;我的建議是使用SQL將數據轉換爲XML,然後將其作爲CLOB傳遞。我不想開始一整個「我在哪裏存儲業務邏輯?」討論,但是如果你打算使用存儲過程,你可能會把大部分的邏輯放在裏面。 – 2012-01-17 03:33:32