次のようにします。データベースからすべてのデータを読み込むためのストアドプロシージャを作成します。しかし、これはOracleでは機能しません。 私はこのようなことをしたいので少し違ってやる必要があるかもしれません: 私はデータのXML表現を返すプロシージャを持っています: ここで私はXML文書を作成するために使用しているコードです私はこのコードを使用してストアドプロシージャからデータを送信できるので、それを変更する方法です。Oracleストアドプロシージャを読み込んでXMLとして表現する
コード: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);
とクラス:
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に変換できます。次に例を示します。 'select dbms_xmlgen.getxml( 'select * from dual')from dual;'。 –
お返事ありがとうございます。結果としてXMLを返信したいだけです。他のすべては正常のままです。したがって、データベースからの通常の読み込みは、例えばXMLへのデータ配列を表し、それを表すクラスを持っています。ちょうど私が変換できるデータの配列を返すストアドプロシージャからどのようにわからない。 – Denonth
私はあなたの質問に直接答えなかったと思います。私の提案は、SQLを使用してデータをXMLに変換し、それをCLOBとして渡すことでした。私は全体を "ビジネスロジックをどこに保存するのか"を始めたいとは思っていません。とにかくストアドプロシージャを使用しようとするならば、あなたのロジックの大部分をその中に入れてもよいでしょう。 –