Oracle Database용Microsoft BizTalk 어댑터는 Oracle 데이터베이스 아티팩트에서 표준 작업 집합을 표시합니다. 이러한 작업을 사용하면 Oracle 함수 또는 프로시저 호출과 같은 작업을 수행하거나 테이블에서 기본 DML(SQL 데이터 조작 언어) 작업을 수행할 수 있습니다. 그러나 Oracle 데이터베이스 어댑터가 표시되지 않는 작업을 수행해야 하는 비즈니스 논리에 의해 구동되는 시나리오가 있을 수 있습니다. 예를 들어 다음을 수행하려고 할 수 있습니다.
Oracle 데이터베이스 어댑터에 의해 표시되지 않는 데이터베이스 아티팩트에서 작업을 수행합니다. 예를 들어 Oracle SEQUENCE의 CURVAL 또는 NEXTVAL을 가져옵니다.
데이터 정의 언어 작업을 수행합니다. 예를 들어 테이블을 만듭니다.
디자인 타임에 없는 데이터베이스 아티팩트에서 작업을 수행합니다. 예를 들어 비즈니스 논리에서 만든 임시 테이블의 레코드를 업데이트합니다.
Oracle 데이터베이스 어댑터가 표시하는 작업보다 테이블에서 더 복잡한 DML 작업을 수행합니다. 예를 들어 JOIN 절을 포함하는 쿼리를 수행합니다.
이러한 종류의 시나리오에서 Oracle 데이터베이스 어댑터는 SQLEXECUTE 작업을 표시합니다. SQLEXECUTE 작업을 사용하여 Oracle 데이터베이스에서 매개 변수가 있는 SQL 문을 수행할 수 있습니다. SQLEXECUTE 작업은 각 집합에 대해 동일한 SQL 문을 한 번 실행할 수 있는 매개 변수 집합으로 구성된 입력 매개 변수 블록을 지원합니다. SQLEXECUTE 작업은 제네릭 레코드 집합에서 SQL 문의 결과를 반환합니다.
이 항목에 사용된 예제 정보
이 항목의 예제에서는 TID_SEQ라는 Oracle SEQUENCE를 사용합니다. 이 SEQUENCE를 생성하는 스크립트는 SDK 샘플과 함께 제공됩니다. SDK 샘플에 대한 자세한 내용은 SDK의 샘플을 참조하세요.
WCF 클라이언트 클래스
WCF 서비스 모델은 SQLEXECUTE 작업에 대한 전용 WCF 클라이언트 SQLEXECUTEClient를 생성합니다. 다음 코드는 SQLEXECUTEClient 및 SQLEXECUTE 작업을 호출하기 위해 호출하는 메서드의 서명을 보여줍니다.
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 클래스의 instance 만들고 SQLEXECUTE 메서드를 호출하여 Oracle 데이터베이스에서 SQL 문을 실행합니다.
WCF 클라이언트 클래스를 만들고 Oracle 데이터베이스 어댑터에서 작업을 호출하는 방법에 대한 자세한 내용은 Oracle 데이터베이스 어댑 터를 사용하여 WCF 서비스 모델 개요를 참조하세요.
다음 예제에서는 SQLEXECUTEClient 를 사용하여 다음 SQL 문을
SELECT tid_seq.nextval id from DUAL
실행하여 Oracle SEQUENCE, TID_SEQ 다음 값을 가져옵니다. 그런 다음 출력이 콘솔에 기록됩니다.
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");
}
}