2012-01-15 54 views
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 *存儲過程的陳述這一點。

謝謝

+1

您可能想要查看DBMS_XMLGEN,它可以將任何查詢轉換爲XML。例如:'從雙選擇'dbms_xmlgen.getxml('select * from dual');'。 – 2012-01-16 02:18:06

+0

嗨,感謝您的回覆。我想只發送XML作爲結果。一切都保持正常。因此,從數據庫中正常讀取,然後將數據數組表示爲XML,並且我有類來表示它。只是不知道如何從存儲過程發回我可以轉換的數據數組。 – Denonth 2012-01-16 10:22:50

+0

我想我沒有直接回答你的問題;我的建議是使用SQL將數據轉換爲XML,然後將其作爲CLOB傳遞。我不想開始一整個「我在哪裏存儲業務邏輯?」討論,但是如果你打算使用存儲過程,你可能會把大部分的邏輯放在裏面。 – 2012-01-17 03:33:32

回答

0

您可以讀取整個數據庫中的所有數據。您必須爲每個表創建單獨的「選擇」語句。

+0

好吧,現在我想試試它只有一個表作爲測試。 – Denonth 2012-01-15 23:35:06