使用 WCF 服務模型在 Oracle 資料庫中執行 SQLEXECUTE 作業
Microsoft BizTalk Adapter for Oracle Database 在 Oracle 資料庫成品上呈現一組標準作業。 藉由使用這些作業,您可以執行呼叫 Oracle 函式或程式等動作,或在資料表上執行基本的 SQL 資料操作語言 (DML) 作業。 不過,您的商務邏輯可能會有需要您執行 Oracle 資料庫配接器未呈現的作業所驅動的情況。 例如,您可能想要:
在 Oracle 資料庫配接器未呈現的資料庫成品上執行作業;例如,取得 Oracle SEQUENCE 的 CURVAL 或 NEXTVAL。
執行資料定義語言作業;例如,建立資料表。
在設計階段不存在的資料庫成品上執行作業;例如,更新商務邏輯所建立之臨時表中的記錄。
在資料表上執行比 Oracle 資料庫配接器介面的作業更複雜的 DML 作業;例如,若要執行包含 JOIN 子句的查詢。
針對這類案例,Oracle 資料庫配接器會顯示 SQLEXECUTE 作業。 藉由使用 SQLEXECUTE 作業,您可以在 Oracle 資料庫上執行參數化 SQL 語句。 SQLEXECUTE 作業支援由參數集組成的輸入參數區塊,可讓您針對每個集合執行相同的 SQL 語句一次。 SQLEXECUTE 作業會傳回泛型記錄集中 SQL 語句的結果。
關於本主題中使用的範例
本主題中的範例會使用名為 TID_SEQ 的 Oracle SEQUENCE。 SDK 範例會提供產生此 SEQUENCE 的腳本。 如需 SDK 範例的詳細資訊,請參閱 SDK 中的範例。
WCF 用戶端類別
WCF 服務模型會產生 SQLEXECUTE 作業的專用 WCF 用戶端 SQLEXECUTEClient。 下列程式碼顯示您呼叫以叫用 SQLEXECUTE 作業之方法的 SQLEXECUTEClient 和簽章。
public partial class SQLEXECUTEClient : System.ServiceModel.ClientBase<SQLEXECUTE>, SQLEXECUTE {
...
public microsoft.lobservices.oracledb._2007._03.GenRecordRow[] SQLEXECUTE(string SQLSTATEMENT, string PARAMETERSCHEMA, microsoft.lobservices.oracledb._2007._03.PARAMETERDATA[] PARAMETERSET);
}
SQLEXECUTE 作業會傳回一般記錄集。 如果 SQLEXECUTE 作業執行的語句所傳回的任何) ,此記錄集就會包含值 (。 您可以將一組輸入參數傳遞至 PARAMETERDATA 物件集合中的 SQLEXECUTE 作業,每個參數都包含以字串表示的輸入參數集合。 下列程式碼顯示 PARAMETERDATA 集合的定義。
namespace microsoft.lobservices.oracledb._2007._03 {
using System.Runtime.Serialization;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute()]
public partial class PARAMETERDATA : object, System.Runtime.Serialization.IExtensibleDataObject {
...
private string[] PARAMETERField;
...
[System.Runtime.Serialization.DataMemberAttribute()]
public string[] PARAMETER {
get {
return this.PARAMETERField;
}
set {
this.PARAMETERField = value;
}
}
}
}
叫用 SQLEXECUTE 作業
若要使用 WCF 用戶端叫用 SQLEXECUTE 作業,請執行下列步驟。
產生目標資料表或檢視表的 SQLEXECUTEClient 類別。
重要
SQLEXECUTE 作業會顯示在根節點底下, (/) 在 [新增配接器服務參考] 對話方塊的[選取類別] 窗格中。
建立 SQLEXECUTEClient 類別的實例,並叫用 SQLEXECUTE 方法以在 Oracle 資料庫上執行 SQL 語句。
如需如何在 Oracle 資料庫配接器上建立 WCF 用戶端類別和叫用作業的詳細資訊,請參閱 使用 Oracle 資料庫配接器概觀 WCF 服務模型。
下列範例會藉由執行下列 SQL 語句,使用 SQLEXECUTEClient 來取得 Oracle SEQUENCE 的下一個值,TID_SEQ:
SELECT tid_seq.nextval id from DUAL
。 然後,輸出會寫入主控台。
using (SQLEXECUTEClient sqlClient = new SQLEXECUTEClient("OracleDBBinding_SQLEXECUTE"))
{
sqlClient.ClientCredentials.UserName.UserName = "SCOTT";
sqlClient.ClientCredentials.UserName.Password = "TIGER";
try
{
sqlClient.Open();
}
catch (Exception ex)
{
Console.WriteLine("Error opening SQL client " + ex.Message);
throw;
}
microsoft.lobservices.oracledb._2007._03.GenRecordRow[] sequenceRec =
new microsoft.lobservices.oracledb._2007._03.GenRecordRow[0];
try
{
sequenceRec = sqlClient.SQLEXECUTE("SELECT tid_seq.nextval id from DUAL", null, null);
}
catch (Exception ex)
{
Console.WriteLine("Error executing SQL client " + ex.Message);
throw;
}
if (sequenceRec.Length > 0)
{
Console.WriteLine("TID_SEQUENCE value is {0}", sequenceRec[0].GenRecordColumn[0].ColumnValue);
}
else
{
Console.WriteLine("Couldn't get next TID_SEQUENCE value");
}
}