REF CURSORS에 대한 메시지 스키마
REF CURSOR는 Oracle 데이터베이스의 결과 집합에 대한 포인터를 나타내는 Oracle PL/SQL 데이터 형식입니다. REF CURSOR 형식은 데이터의 입력 및 출력 스트리밍을 가능하게 하며 PL/SQL 코드 블록과 대량의 데이터를 전송하는 데 이상적입니다. Oracle Database용 Microsoft BizTalk Adapter는 강력한 형식의 약한 형식의 REF CURSOR 매개 변수를 PL/SQL 프로시저 및 IN, OUT 및 IN OUT 매개 변수로 전달하는 기능을 지원합니다.
Oracle 데이터베이스에서 REF CURSOR 형식은 강력한 형식이거나 약한 형식일 수 있습니다.
강력한 형식의 REF CURSOR는 에서
TYPE StrongCurType IS REF CURSOR RETURN emp%ROWTYPE;
와 같이 RETURN 절로 선언됩니다. 강력한 형식의 REF CURSOR 변수는 REF CURSOR 형식이 선언된 형식과 일치하는 데이터가 포함된 결과 집합만 나타낼 수 있습니다. Oracle Database 어댑터는 강력한 형식의 REF CURSOR에 대한 강력한 형식의 결과 집합을 반환합니다.약한 형식의 REF CURSOR는 에서
TYPE WeakCurType IS REF CURSOR;
와 같이 RETURN 절 없이 선언됩니다. 또한 Oracle은 약한 형식의 REF CURSOR 변수를 선언하는 데 사용할 수 있는 SYS_REFCURSOR 라는 특수 REF CURSOR 형식을 제공합니다. 약한 형식의 REF CURSOR 변수는 모든 종류의 행 데이터를 포함하는 결과 집합을 나타낼 수 있습니다. Oracle Database 어댑터는 약한 형식의 REF CURSOR에 대해 약한 형식의 제네릭 레코드 결과 집합을 반환합니다.
IN REF CURSOR 매개 변수
Oracle 서버에 REF CURSOR를 만들 ODP.NET API가 없으므로 Oracle 데이터베이스 어댑터는 클라이언트 프로그램에서 REF CURSOR 변수를 만들고 유지 관리하는 기능을 제공할 수 없습니다.
그러나 Oracle 데이터베이스 어댑터는 REF CURSOR를 반환하는 PL/SQL 코드 블록을 지정하여 클라이언트가 IN REF CURSOR 매개 변수를 함수 또는 저장 프로시저에 전달할 수 있도록 합니다. 어댑터는 이 코드를 사용하여 Oracle 서버에서 REF CURSOR 변수를 만들고 엽니다. 그런 다음 이 변수를 IN 매개 변수로 사용하여 함수 또는 저장 프로시저를 호출합니다.
Oracle 데이터베이스 어댑터는 IN REF CURSOR 매개 변수를 PL/SQL 코드 블록을 포함하는 문자열로 나타냅니다. 이 블록 내에서 REF CURSOR의 위치는 물음표(?)로 지정됩니다. PL/SQL 코드 블록은 SQL 쿼리를 포함하는 OPEN-FOR 문을 포함할 수 있습니다. 또는 열린 REF CURSOR가 OUT 매개 변수에 반환되는 함수 또는 프로시저 호출을 포함할 수 있습니다.
다음은 저장 프로시저 또는 함수를 호출하여 REF CURSOR를 열어 IN REF CURSOR를 지정하는 방법을 보여 줍니다.
<[IN_REF_CURSOR_PARAM_NAME]>begin [SP_NAME]([SP_PARAMS...], ?, [SP_PARAMS...]); end;</[IN_REF_CURSOR_PARAM_NAME]>
Example:
<EMP_RC>begin GETEMP(1, ?); end; </EMP_RC>
다음은 SELECT 쿼리를 사용하여 REF CURSOR를 열어 IN REF CURSOR를 지정하는 방법을 보여 줍니다.
<IN_REF_CURSOR_PARAM_NAME>begin open ? for select [FIELD_NAMES] from [TABLE_NAME]; end;</IN_REF_CURSOR_PARAM_NAME>
Example:
<EMP_RC>begin open ? for select * from EMP; end;</EMP_RC>
OUT REF CURSOR 매개 변수
OUT REF CURSOR 매개 변수는 강력한 형식 또는 약한 형식의 결과 집합으로 반환됩니다. 반환되는 결과 집합의 형식은 REF CURSOR 매개 변수가 Oracle 서버의 저장 프로시저 또는 함수 정의에서 강력한 형식 또는 약한 형식의 REF CURSOR로 선언되는지 여부에 따라 달라집니다. 강력한 형식의 REF CURSOR 매개 변수에 대해 강력한 형식의 결과 집합이 반환되고 약한 형식의 REF CURSOR 매개 변수(예: SYS_REFCURSOR 형식으로 선언된 매개 변수)에 대해 약한 형식의 결과 집합이 반환됩니다.
다음은 강력한 형식의 OUT REF CURSOR 매개 변수에 대한 XML을 보여 줍니다.
<[PARAM_NAME]>
<[PARAM_NAME]RECORD>
<[COL1_NAME]>value1</[COL1_NAME]>
<[COL2_NAME]>value2</[COL2_NAME]>
...
</[PARAM_NAME]RECORD>
</[PARAM_NAME]>
[PARAM_NAME] = OUT REF CURSOR parameter name; for example, EMP_REFCURSOR
[COL_NAME] = Name of a column in the REF CURSOR type; for example, Name.
다음은 약한 형식의 OUT REF CURSOR 매개 변수에 대한 XML을 보여 줍니다.
<[PARAM_NAME]>
<GenRecordRow xmlns="oracledb">
<GenRecordColumn>
<ColumnName>COL_NAME</ColumnName>
<ColumnValue>COL_VALUE</ColumnValue>
<ColumnType>COL_TYPE</ColumnType>
</GenRecordColumn>
…
</GenRecordRow>
…
</[PARAM_NAME]>
[COL_NAME] = Name of column; for example, Name
[COL_VALUE] = Column value; for example, Scott
[COL_TYPE] = Column data type; for example, System.String
IN OUT REF CURSOR 매개 변수
Oracle 데이터베이스 어댑터는 IN REF CURSOR 매개 변수를 문자열로 모델링하고 OUT REF CURSOR 매개 변수를 복합 형식으로 모델링하므로 IN OUT REF CURSOR 매개 변수에 대해 단일 형식을 지원할 수 없습니다. 이러한 이유로 IN OUT REF CURSOR 매개 변수는 요청 메시지의 IN 매개 변수와 응답 메시지의 OUT 매개 변수라는 두 가지 매개 변수로 처리됩니다.
서비스 모델 프로그래밍에서 이름 충돌을 방지하기 위해 Oracle 데이터베이스 어댑터는 요청 메시지의 IN 매개 변수에 "_IN" 문자열을 추가하여 [PARAM_NAME]라는 지정된 매개 변수에 대해 두 개의 매개 변수를 만듭니다.
[PARAM_NAME]_IN 저장 프로시저 또는 함수 요청 메시지의 IN REF CURSOR 매개 변수입니다. REF CURSOR를 반환하는 PL/SQL 문(선택 쿼리 또는 저장 프로시저 또는 함수 호출)이 포함되어 있습니다.
[PARAM_NAME]은 저장 프로시저 또는 함수 응답 메시지의 OUT REF CURSOR 매개 변수입니다. OUT REF CURSOR를 강력한 형식 또는 약한 형식의 결과 집합으로 포함합니다.
중요
어댑터는 [PARAM_NAME _IN]라는 IN 매개 변수와 [PARAM_NAME]라는 IN OUT REF CURSOR 매개 변수를 포함하는 프로시저 또는 함수를 지원할 수 없습니다. 어댑터에는 REF CURSOR 매개 변수에 대한 입력을 나타내는 [PARAM_NAME]_IN 매개 변수가 예상되고 요청 메시지에서 두 매개 변수를 모두 지정할 수 없기 때문입니다.