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