Thursday, October 08, 2009 - 文章

【茶包射手專欄】Oracle連線問題處理筆記

今天在一團混亂中解掉一枚Oracle連線茶包,由於相關環境與處理過程蠻雜亂的,這裡只整理結論備忘:

  • NETWORK\ADMIN\SQLNET.ORA裡預設有個設定SQLNET.AUTHENTICATION_SERVICES = (NTS)。這個設定可以允許Windows的Oracle Client用OS的身份連上Oracle,不用提供帳號密碼。(跟SQL的Integrated Security = SSPI概念類似)。
  • 今天在一個Oracle 9.2 Client與Oracle 10.2 Server都是在Windows平台的環境下,發現一個狀況: ASP.NET對Oracle執行一般的連線查詢更新動作都OK;若Oracle Connection被包在TransactionScope中,連線時會發生ORA-12638: Crendential retrieval failed(證明資料擷取失敗)的錯誤。
  • 將Oracle Client的SQLNET.AUTHENTICATION_SERVICES設定加#Remark掉,問題依舊存在,但IISRESET後問題就排除了。
  • Oracle Server要穿防火牆: 開1521 Port、Oracle.exe、TnsLsnr.exe三條例外。
MEMO-PL/SQL SELECT XML Nodes FROM XmlType

今天跟同事商討整合規格時,遇到一個議題: 如果將多筆資料轉成XML Element,以XML String方式寫入ORACLE欄位,在Stored Procedure裡可否比照Table,用SELECT的方式將多筆資料查詢出來呢?

剛好前幾天另一位同事提到Oracle 9+支援XmlType,現學現賣,再參考網路上的資料,我寫了以下的範例:

DECLARE
  xt XmlType;
  TYPE refCur IS REF CURSOR;
  rc refCur;
  t VARCHAR2(1024);
  i NUMBER;
BEGIN
    xt := XmlType(
'<root><item>Item1</item><item>Item2</item><item>Item3</item></root>');
    
    OPEN rc FOR
      SELECT extractValue(value(x), '//item/text()') as ItemText
      FROM TABLE(XmlSequence(EXTRACT(xt, '//item'))) X;
 
    i := 0;
    
    LOOP
      FETCH rc INTO t;
      EXIT WHEN rc%NOTFOUND; 
      i := i + 1;
      dbms_output.put_line(i || '->' || t);
    
    END LOOP;
END;

執行結果為:

1->Item1
2->Item2
3->Item3

測試成功!

搜尋

Go

<October 2009>
SunMonTueWedThuFriSat
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
 
RSS
【工商服務】
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication