CREATE FUNCTION(OLE DB 외부 테이블)

CREATE FUNCTION(OLE DB 외부 테이블) 명령문은 사용자 정의 OLE DB 외부 테이블 함수를 등록하여 OLE DB Provider에서 데이터에 액세스하는 데 사용됩니다.

테이블 함수는 SELECT의 FROM절에 사용될 수 있습니다.

호출

이 명령문은 애플리케이션 프로그램에 임베드되거나 동적 SQL문을 사용하여 실행할 수 있습니다. 이는 DYNAMICRULES 실행 동작이 패키지에 영향을 주는 경우에만 동적으로 준비될 수 있는 실행문입니다(SQLSTATE 42509).

권한 부여

명령문의 권한 부여 ID가 보유한 특권은 다음 중 하나 이상을 포함해야 합니다.
  • 함수의 내재적 또는 명시적 스키마 이름이 존재하지 않는 경우 데이터베이스에 대한 IMPLICIT_SCHEMA 권한
  • 함수의 스키마 이름이 기존의 스키마를 가리키지 않을 경우, 데이터베이스에 대한 CREATEIN 특권
  • 함수의 스키마 이름이 기존 스키마를 참조하는 경우 스키마에 대한 SCHEMAADM 권한
  • DBADM 권한입니다.
명령문의 권한 부여 ID가 보유한 특권은 다음 권한 중 하나도 포함해야 합니다.
  • 데이터베이스에 있는 CREATE_EXTERNAL_ROUTINE 권한
  • SYSADM 권한.
  • DB2_ALTERNATE_AUTHZ_BEHAVIOUR 레지스트리 변수가 설정되고 EXTERNAL_ROUTINE_DBADM값을 포함하는 경우 DBADM 권한
    참고: Db2 11.5.8 보안 특수 빌드 29133에는 SYSADM및 DBADM 권한 모두의 내재된 권한에 대한 변경사항이 포함되어 있습니다. 기본적으로 DBADM 권한이 아닌 SYSADM 권한에는 내재적으로 CREATE_EXTERNAL_ROUTINE및 CREATE_NOT_FENCED_ROUTINE 권한이 있습니다. DB2_ALTERNATE_AUTHZ_BEHAVIOUR 레지스트리 변수가 설정되고 EXTERNAL_ROUTINE_DBADM 또는 NOT_FENCED_ROUTINE_DBADM값 중 하나를 포함하는 경우 DBADM 권한도 내재적으로 이러한 특권을 갖습니다.

그룹 특권은 CREATE FUNCTION문에 지정되는 테이블 또는 뷰에 대해 고려되지 않습니다.

SECURED 옵션이 지정된 경우, 명령문의 권한 부여 ID는 SECADM 권한 또는 CREATE_SECURE_OBJECT 권한을 포함해야 합니다(SQLSTATE 42501).

구문

Read syntax diagramSkip visual syntax diagramCREATE FUNCTIONfunction-name(parameter-declaration )RETURNS TABLE( ,column-namedata-type2 )option-list
parameter-declaration
Read syntax diagramSkip visual syntax diagram parameter-name data-type1 default-clause
data-type1, data-type2
Read syntax diagramSkip visual syntax diagrambuilt-in-typedistinct-type-namestructured-type-nameREF(type-name)
built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA1CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( integerKMG)BLOBBINARY LARGE OBJECT(1M)( integerKMG)DATETIMETIMESTAMP(6)(integer)SYSPROC.DB2SECURITYLABEL23
default-clause
Read syntax diagramSkip visual syntax diagramDEFAULT NULLconstantspecial-registerglobal-variable(expression)
option-list
Read syntax diagramSkip visual syntax diagramLANGUAGE OLEDB SPECIFICspecific-nameEXTERNALNAME'string' NOT DETERMINISTICDETERMINISTICSTATIC DISPATCHRETURNS NULL ON NULL INPUTCALLED ON NULL INPUTNO EXTERNAL ACTIONEXTERNAL ACTIONCARDINALITYintegerNOT SECUREDSECURED
Notes:
  • 1 The FOR BIT DATA clause can be specified in any order with the other column constraints that follow. The FOR BIT DATA clause cannot be specified with string units CODEUNITS32 (SQLSTATE 42613).
  • 2 DB2SECURITYLABEL is the built-in distinct type that must be used to define the row security label column of a protected table.
  • 3 For a column of type DB2SECURITYLABEL, NOT NULL WITH DEFAULT is implicit and cannot be explicitly specified (SQLSTATE 42842). The default value for a column of type DB2SECURITYLABEL is the session authorization ID's security label for write access.

설명

함수명
정의하는 함수의 이름을 지정합니다. 이는 함수를 지정하는 규정되거나 규정되지 않은 이름입니다. function-name의 규정되지 않은 양식은 SQL ID입니다. 동적 SQL문에서 CURRENT SCHEMA 특수 레지스터는 규정되지 않은 오브젝트 이름의 규정자로서 사용됩니다. 정적 SQL문에서 QUALIFIER 프리컴파일 또는 바인드 옵션은 내재적으로 규정되지 않은 오브젝트 이름의 규정자를 지정합니다. 규정된 양식은 마침표와 SQL ID가 뒤따르는 schema-name입니다.

각 매개변수의 데이터 유형 및 매개변수 수와 함께 명시적 또는 내재된 규정자를 포함하는 이름(데이터 유형의 길이, 정밀도 또는 스케일 속성을 고려하지 않음)은 카탈로그에 설명된 함수를 식별하면 안됩니다(SQLSTATE 42723). 매개변수의 데이터 유형 및 개수와 함께 규정되지 않은 이름은 당연히 해당되는 스키마 내에서 고유하지만, 스키마 사이에 고유하지 않아도 됩니다.

두 파트로 구성된 이름이 지정되면 schema-name은 'SYS'로 시작할 수 없습니다(SQLSTATE 42939).

술어에서 키워드로 사용되는 여러 이름은 시스템에서 사용하도록 예약되어 있으므로, function-name으로 사용할 수 없습니다(SQLSTATE 42939). 이름은 SOME, ANY, ALL, NOT, AND, OR, BETWEEN, NULL, LIKE, EXISTS, IN, UNIQUE, OVERLAPS, SIMILAR, MATCH 및 비교 연산자입니다.

함수 서명에 차이가 있는 경우 두 개 이상의 함수에 동일한 이름을 사용할 수 있습니다. 금지되어 있지는 않지만, 외부 사용자 정의 테이블 함수에는 내장 함수와 동일한 이름을 부여하면 안됩니다.

(parameter-declaration, ...)
함수의 입력 매개변수 수를 식별하고 각 매개변수의 데이터 유형 및 선택적 기본값을 지정합니다. 입력 매개변수가 지정되지 않은 경우, 데이터는 쿼리 최적화를 통해 가능한 외부 소스 하위 집합에서 검색됩니다. 입력 매개변수는 명령 텍스트를 OLE DB Provider로 전달합니다.
매개변수가 없는 함수를 등록할 수 있습니다. 이 경우, 데이터 유형 개입 없이 괄호가 코드화되어야 합니다. 예를 들면, 다음과 같습니다.
   CREATE FUNCTION WOOFER() ...

스키마 내에서 동일하게 이름이 지정된 어떤 두 개의 함수도 해당되는 모든 매개변수에 대해 정확히 동일한 유형을 가질 수 없습니다. 길이, 정밀도 및 스케일은 이 유형 비교에서 고려되지 않습니다. 그러므로 CHAR(8) 및 CHAR(35)는 동일한 유형으로 간주됩니다. 매개변수에 대해 지정된 약하게 유형 지정된 구별 유형은 구별 유형의 소스 유형과 동일한 데이터 유형으로 간주됩니다. 유니코드 데이터베이스의 경우 CHAR(13) 및 GRAPHIC(8)은 동일한 유형으로 간주됩니다. 중복되는 서명은 오류를 리턴합니다(SQLSTATE 42723).

parameter-name
입력 매개변수에 대한 선택적 이름을 지정합니다.
data-type1
매개변수의 데이터 유형을 지정합니다. 데이터 유형은 문자나 그래픽 문자열 데이터 유형 또는 문자나 그래픽 문자열 데이터 유형을 기반으로 하는 구별 유형일 수 있습니다. 유형 BINARY, VARBINARY 및 XML의 매개변수가 지원되지 않습니다(SQLSTATE 42815).
각 내장 데이터 유형에 대한 자세한 전체 설명은 CREATE TABLE을 참조하십시오.

사용자 정의 구별 유형의 경우 매개변수에 대한 길이, 정밀도 또는 스케일 속성은 구별 유형의 소스 유형 속성(CREATE TYPE에서 지정한)입니다. 구별 유형 매개변수는 구별 유형의 소스 유형으로 전달됩니다. 구별 유형의 이름이 규정되지 않은 경우, 데이터베이스 관리자는 SQL 경로에서 스키마를 검색하여 스키마 이름을 분석합니다.

기본값
매개변수의 기본값을 지정합니다. 기본값은 상수, 특수 레지스터, 전역 변수, 표현식 또는 키워드 NULL이 될 수 있습니다. 기본값으로 지정할 수 있는 특수 레지스터는 컬럼 기본값에 대해 지정할 수 있는 것과 동일합니다(CREATE TABLE 명령문에서 default-clause 참조). 기타 특수 레지스터는 표현식을 사용하여 기본값으로 지정될 수 있습니다.

표현식은 "Expressions"에서 설명된 유형의 표현식일 수 있습니다. 기본값이 지정되지 않으면, 매개변수에는 기본값이 없고 해당 인수는 프로시저의 호출에서 생략될 수 없습니다. expression의 최대 크기는 64KB입니다.

기본 표현식은 SQL 데이터를 수정하지 않아야 합니다(SQLSTATE 428FL 또는 SQLSTATE 429BL). 표현식은 매개변수 데이터 유형에 호환 가능한 지정이어야 합니다(SQLSTATE 42821).

ARRAY, ROW 또는 CURSOR 유형의 매개변수에 대한 기본값을 지정할 수 없습니다(SQLSTATE 429BB).

RETURNS TABLE
함수의 출력이 테이블임을 지정합니다. 이 키워드 다음의 괄호는 해당 테이블의 컬럼 이름과 유형 목록을 구분하여, 추가 스펙(예: 제한조건)이 없는 단순 CREATE TABLE문의 스타일과 유사합니다.
column-name
해당 행 세트 컬럼 이름과 동일해야 하는 컬럼의 이름을 지정합니다. 이름은 규정할 수 없으며 테이블의 두 개 이상의 컬럼에 대해 동일한 이름을 사용할 수 없습니다.
data-type2
컬럼의 데이터 유형을 지정합니다. BINARY, VARBINARY 및 XML이 지원되지 않습니다(SQLSTATE 42815).
built-in-type
내장 데이터 유형의 설명은 "CREATE TABLE"을 참조하십시오.
SPECIFIC 특정 이름
정의 중인 함수의 인스턴스에 대해 고유한 이름을 제공합니다. 이 특정 이름은 이 함수에 대해 소싱하거나, 함수를 삭제하거나, 함수에 주석을 붙일 때 사용할 수 있습니다. 함수 호출에는 사용할 수 없습니다. specific-name의 규정되지 않은 양식은 SQL ID입니다. 규정된 양식은 마침표와 SQL ID가 뒤따르는 schema-name입니다. 명시적 또는 내재된 규정자를 포함하는 이름은 애플리케이션 서버에 존재하는 다른 함수 인스턴스를 식별하면 안됩니다. 그렇지 않으면 오류(SQLSTATE 42710)가 발생합니다.

specific-name은 기존의 function-name과 같을 수 있습니다.

규정자를 지정하지 않은 경우, function-name에 사용된 규정자가 사용됩니다. 규정자가 지정된 경우, function-name의 명시적 또는 내재된 규정자와 동일해야 합니다. 그렇지 않으면 오류(SQLSTATE 42882)가 발생합니다.

specific-name이 지정되지 않은 경우에는 고유한 이름이 데이터베이스 관리자에 의해 생성됩니다. 고유 이름은 SQL 다음에 문자 시간소인이 따라 나옵니다(SQLyymmddhhmmssxxx).

외부 이름 'string'
이 절은 외부 테이블 및 OLE DB Provider를 식별합니다.

'문자열' 옵션은 최대 254바이트를 가지는 문자열 상수입니다.

지정된 문자열은 OLE DB provider로 연결 및 세션을 설정하고 행 세트에서 데이터를 검색하는 데 사용됩니다. CREATE FUNCTION문이 실행되면 OLE DB Provider 및 데이터 소스가 존재하지 않아도 됩니다.

string은 다음과 같이 지정할 수 있습니다.
Read syntax diagramSkip visual syntax diagram' server!rowset!rowset!connectstring!COLLATING_SEQUENCE = NY '
server
CREATE SERVER로 정의된 데이터 소스의 로컬 이름을 식별합니다.
행 세트
OLE DB Provider에서 표시된 행 세트(테이블)를 식별합니다. 완전한 테이블 이름은 카탈로그나 스키마 이름을 지원하는 OLE DB Provider에 대해 제공되어야 합니다.
연결 문자열
데이터 소스에 대한 연결에 필요한 초기화 특성의 문자열 버전입니다. 연결 문자열의 기본 형식은 ODBC 연결 문자열을 기반으로 합니다. 문자열은 세미콜론으로 구분된 일련의 키워드/값 쌍을 포함합니다. 등호 기호(=)는 각 키워드 및 해당 값을 구분합니다. 키워드는 OLE DB 초기화 특성(특성 설정 DBPROPSET_DBINIT) 또는 provider-특정 키워드의 설명입니다.
COLLATING_SEQUENCE
데이터 소스가 Db2®와 동일한 데이터 정렬 시퀀스를 사용하는지 여부를 지정합니다. 자세한 내용은 CREATE SERVER를 참조하십시오. 유효한 값은 다음과 같습니다.
  • Y = 동일한 데이터 정렬 시퀀스
  • N = 다른 데이터 정렬 시퀀스
COLLATING_SEQUENCE가 지정되지 않은 경우, 데이터 소스는 Db2와 다른 조합 시퀀스를 갖는 것으로 가정됩니다.

server가 제공되면, connectstring 또는 COLLATING_SEQUENCE는 외부 이름에서 허용되지 않습니다. 서버 옵션 CONNECTSTRING 및 COLLATING_SEQUENCE로 정의됩니다. server가 제공되지 않는 경우 connectstring이 제공되어야 합니다. rowset가 제공되지 않는 경우, 테이블 함수에는 명령 텍스트를 OLE DB provider로 전달하는 입력 매개변수가 있어야 합니다.

LANGUAGE OLEDB
데이터베이스 관리자가 내장 일반 OLE DB 이용자를 배치하여 OLE DB Provider에서 데이터를 검색함을 의미합니다. 개발자가 필요한 테이블 함수 구현이 없습니다.

LANGUAGE OLEDB 테이블 함수는 어느 플랫폼에서든 작성될 수 있으나, Microsoft OLE DB에 의해 지원되는 플랫폼에서만 실행될 수 있습니다.

DETERMINISTIC 또는 NOT DETERMINISTIC
이 선택적 절은 함수가 항상 지정된 인수 값에 대해 동일한 결과를 리턴하는지(DETERMINISTIC) 또는 함수가 결과에 영향을 주는 일부 상태 값에 의존하는지(NOT DETERMINISTIC) 여부를 지정합니다. 즉, DETERMINISTIC 함수는 항상 입력이 같은 연속 호출에서 동일한 테이블을 리턴합니다. 동일한 입력은 항상 동일한 결과를 생성한다는 사실을 이용하는 최적화는 NOT DETERMINISTIC을 지정하여 방지할 수 있습니다.
STATIC DISPATCH
이 옵션 절은 함수 분석 시 데이터베이스 관리자가 함수의 매개변수의 정적 유형(선언된 유형)을 기반으로 하는 함수를 선택함을 표시합니다.
RETURNS NULL ON NULL INPUT 또는 CALLED ON NULL INPUT
이 선택적 절은 임의 인수가 널(null)인 경우 외부 함수 호출을 피하기 위해 사용할 수 있습니다. 사용자 정의 함수가 매개변수가 없도록 정의되면, 물론 이 널 인수 조건이 발생할 수 없습니다.

RETURNS NULL ON NULL INPUT이 지정되고 실행 시 함수의 인수 중 하나가 널인 경우, 사용자 정의 함수가 호출되지 않으며 결과는 비어 있는 테이블입니다. 즉 행이 없는 테이블입니다.

CALLED ON NULL INPUT이 지정된 경우, 인수가 널인 것과 상관없이 실행 시 사용자 정의 함수가 호출됩니다. 로직에 따라 비어 있는 테이블을 리턴하거나 리턴하지 않을 수 있습니다. 그러나 널(NULL) 인수 값에 대한 테스트 책임은 UDF에 있습니다.

값 NULL CALL은 역방향 및 계열 호환성을 위해 CALLED ON NULL INPUT의 동의어로 사용할 수 있습니다. 마찬가지로, NOT NULL CALL은 RETURNS NULL ON NULL INPUT의 동의어로 사용할 수 있습니다.

NO EXTERNAL ACTION 또는 EXTERNAL ACTION
데이터베이스 관리자가 관리하지 않는 오브젝트의 상태를 변경하는 조치를 함수가 수행하는지 여부를 지정합니다. 외부 조치의 예는 메시지를 보내거나 레코드를 파일에 쓰는 것입니다. 기본값은 NO EXTERNAL ACTION입니다.
NO EXTERNAL ACTION
데이터베이스 관리자가 관리하지 않는 오브젝트의 상태를 변경하는 조치를 함수가 수행하지 않도록 지정합니다. 데이터베이스 관리자는 SQL문의 최적화 동안 이 정보를 사용합니다.
EXTERNAL ACTION
데이터베이스 관리자가 관리하지 않는 오브젝트의 상태를 변경하는 조치를 함수가 수행하도록 지정합니다.
CARDINALITY 정수
이 선택적 절은 최적화 목적으로 함수가 리턴할 예상 행 수의 추정을 제공합니다. integer에 유효한 값은 0에서 2 147 483 647까지입니다.

CARDINALITY절이 테이블 함수에 대해 지정되지 않는 경우, 최종 값을 기본값으로 가정합니다. 최종 값은 RUNSTATS 유틸리티가 통계를 수집하지 않은 테이블에 대해 가정된 동일한 값입니다.

경고: 함수가 사실상 무한 카디널리티를 가지면, 수행하도록 호출될 때마다 행을 리턴하며 "end-of-table" 조건을 리턴하지 않습니다. 그런 다음 함수에 end-of-table 조건을 요구하는 쿼리는 무한이며 인터럽트되어야 합니다. 이와 같은 쿼리의 예는 GROUP BY 또는 ORDER BY 절을 포함하는 쿼리입니다. 이와 같은 UDF는 작성하지 않도록 합니다.

NOT SECURED 또는 SECURED
함수가 행 및 컬럼 액세스 제어에 대해 안전하다고 간주되는지 여부를 지정합니다. 기본값은 NOT SECURED입니다.
NOT SECURED
함수가 보안 상태가 아님을 표시합니다. 함수가 호출될 때 함수의 인수는 컬럼 마스크가 사용되고 컬럼 레벨 액세스 제어가 해당 테이블에 대해 활성화되는 컬럼을 참조하지 않아야 합니다(SQLSTATE 428HA). 이 규칙은 명령문의 어디에서든 호출되는 보안되지 않는 사용자 정의 함수에 적용됩니다.
SECURED
함수가 보안 상태임을 표시합니다. 함수는 행 권한 또는 컬럼 마스크에서 참조될 때 보안되어야 합니다(SQLSTATE 428H8).

참고

  • FENCED, FINAL CALL, SCRATCHPAD, PARAMETER STYLE SQL, DISALLOW PARALLEL, NO DBINFO, NOT THREADSAFE 및 NO SQL은 명령문에 내재되며 지정될 수 있습니다.
  • 사용자 정의 함수의 매개변수에 대한 데이터 유형을 선택할 때, 해당되는 입력 값에 영향을 줄 승격에 대한 규칙을 고려하십시오. 예를 들어, 입력 값으로 사용할 수 있는 상수는 예상한 것과 다른 내장 데이터 유형을 가질 수 있고, 한층 중요하게는 예상한 데이터 유형으로 승격되지 않을 수 있습니다. 승격을 위한 규칙을 기반으로 매개변수에 대한 다음 데이터 유형을 사용하는 것이 일반적으로 권장됩니다.
    • CHAR 대신 VARCHAR
    • GRAPHIC 대신 VARGRAPHIC
  • 플랫폼 사이의 UDF 이식성을 위해, 다음 데이터 유형을 사용할 것을 권장합니다.
    • FLOAT 대신 DOUBLE 또는 REAL
    • NUMERIC 대신 DECIMAL
    • LONG VARCHAR 대신 CLOB(또는 BLOB)
  • 아직 존재하지 않는 스키마 이름을 가지고 있는 함수를 작성하면 명령문의 권한 부여 ID에 IMPLICIT_SCHEMA 권한이 있는 경우 해당 스키마의 내재된 작성이 발생합니다. 스키마 소유자는 SYSIBM입니다. 스키마에 대한 CREATEIN 특권이 PUBLIC에 부여됩니다.
  • 특권: 함수 정의자는 항상 함수에 대해 EXECUTE 특권 WITH GRANT OPTION 및 함수를 삭제하기 위한 권한을 수신합니다.
  • 기본값 설정: 기본값으로 정의된 함수 매개변수는 함수가 호출될 때 기본값으로 설정됩니다. 하지만 해당되는 인수에 대해 값이 제공되지 않는 경우에만 함수가 호출될 때 DEFAULT로 지정됩니다.
  • 구문 대체: 다음의 구문 대체가 DB2의 이전 버전 및 기타 데이터베이스 제품과의 호환성을 위해 지원됩니다. 이러한 대체는 비표준이므로 사용하지 않아야 합니다.
    • NOT VARIANT는 DETERMINISTIC 대신 지정할 수 있습니다.
    • VARIANT는 NOT DETERMINISTIC 대신 지정할 수 있습니다.
    • NULL CALL은 CALLED ON NULL INPUT 대신 지정할 수 있습니다.
    • NOT NULL CALL은 RETURNS NULL ON NULL INPUT 대신 지정할 수 있습니다.
  • 보안 함수 작성: 보통 SECADM 권한을 가진 사용자에게는 트리거나 함수와 같은 데이터베이스 오브젝트를 작성할 특권이 없습니다. 일반적으로, 이 사용자는 함수에 의해 액세스하는 데이터를 조사하고, 안전한지 확인한 후, 현재 안전한 사용자 정의 함수(UDF)를 작성할 수 있는 필수 특권을 가지고 있는 사람에게 CREATE_SECURE_OBJECT 권한을 부여합니다. 함수가 작성된 후에는 함수 소유자로부터 CREATE_SECURE_OBJECT 권한을 취소합니다.

    SECURED 속성은 사용자가 사용자 정의 함수(UDF)에 대한 모든 변경사항을 위한 변경 제어 감사 프로시저를 설정한다고 선언하는 어설션이라고 간주됩니다. 데이터베이스 관리자는 그러한 제어 감사 프로시저가 모든 후속 ALTER FUNCTION문 또는 외부 패키지에 대한 변경사항을 대신한다고 가정합니다.

  • 보안 함수에서 다른 사용자 정의 함수 호출: 보안 사용자 정의 함수(UDF)가 다른 사용자 정의 함수를 호출하는 경우, 데이터베이스 관리자는 해당되는 중첩 사용자 정의 함수에 SECURED 속성이 있는지 유효성을 확인하지 않습니다. 중첩된 함수가 민감한 데이터에 액세스할 수 있는 경우, SECADM 권한을 가진 사용자는 해당 함수가 해당 데이터에 액세스하도록 허용되고 변경 제어 감사 프로시저가 해당 함수에 대한 모든 변경사항을 위해 설정되는지 확인해야 합니다.
  • EXTERNAL ACTION 함수: EXTERNAL ACTION 함수가 가장 외부 선택 목록이 아닌 다른 것에서 호출되는 경우, 결과는 예상할 수 없습니다. 함수가 호출되는 횟수는 사용되는 액세스 플랜에 따라 달라지기 때문입니다.

예:

  1. Microsoft Access 데이터베이스에서 주문 정보를 검색하는 OLE DB 테이블 함수를 등록합니다. 연결 문자열은 외부 이름으로 정의됩니다.
       CREATE FUNCTION orders ()
         RETURNS TABLE (orderid INTEGER,
                        customerid CHAR(5),
                        employeeid INTEGER,
                        orderdate TIMESTAMP,
                        requireddate TIMESTAMP,
                        shippeddate TIMESTAMP,
                        shipvia INTEGER,
                        freight dec(19,4))
         LANGUAGE OLEDB
         EXTERNAL NAME '!orders!Provider=Microsoft.Jet.OLEDB.3.51;
                                 Data Source=c:\sqllib\samples\oledb\nwind.mdb
         !COLLATING_SEQUENCE=Y';			    
  2. OLE DB 테이블 함수를 등록합니다. 이 함수는 Oracle 데이터베이스에서 고객 정보를 검색합니다. 서버 정의를 통해 연결 문자열이 제공됩니다. 테이블 이름은 외부 이름에서 완전합니다. 로컬 사용자 john은 원격 사용자 dave에 맵핑됩니다. 기타 사용자는 연결 문자열에 게스트 사용자 ID를 사용합니다.
       CREATE SERVER spirit
         WRAPPER OLEDB
         OPTIONS (CONNECTSTRING 'Provider=MSDAORA;Persist Security Info=False;
                                 User ID=guest;password=pwd;Locale Identifier=1033;
                                 OLE DB Services=CLIENTCURSOR;Data Source=spirit');
    
       CREATE USER MAPPING FOR john
         SERVER spirit
         OPTIONS (REMOTE_AUTHID 'dave', REMOTE_PASSWORD 'mypwd');
    
       CREATE FUNCTION customers ()
         RETURNS TABLE (customer_id INTEGER,
                        name  VARCHAR(20),
                        address VARCHAR(20),
                        city VARCHAR(20),
                        state VARCHAR(5),
                        zip_code INTEGER)
         LANGUAGE OLEDB
         EXTERNAL NAME 'spirit!demo.customer';
  3. OLE DB 테이블 함수를 등록합니다. 이 함수는 MS SQL Server 7.0 데이터베이스에서 상점에 대한 정보를 검색합니다. 연결 문자열은 외부 이름으로 제공됩니다. 테이블 함수에는 명령 텍스트를 통해 OLE DB Provider에게 전달하는 입력 매개변수가 있습니다. 행 세트 이름을 외부 이름에 지정하지 않아도 됩니다. 쿼리 예는 SQL문 텍스트를 전달하여 맨 위 세 개의 상점을 검색합니다.
       CREATE FUNCTION favorites (varchar(600))
         RETURNS TABLE (store_id CHAR (4),
                        name  VARCHAR (41),
                        sales INTEGER)
         SPECIFIC favorites
         LANGUAGE OLEDB
         EXTERNAL NAME '!!Provider=SQLOLEDB.1;Persist Security Info=False;
                        User ID=sa;Initial Catalog=pubs;Data Source=WALTZ;
                        Locale Identifier=1033;Use Procedure for Prepare=1;
                        Auto Translate=False;Packet Size=4096;Workstation ID=WALTZ;
                        OLE DB Services=CLIENTCURSOR;';
    
       SELECT *
         FROM TABLE (favorites
                    (' select top 3 sales.stor_id as store_id, ' CONCAT
                         ' stores.stor_name as name, ' CONCAT
                         ' sum(sales. qty) as sales ' CONCAT
                     ' from sales, stores ' CONCAT
                     ' where sales.stor_id = stores.stor_id ' CONCAT
                     ' group by sales.stor_id, stores.stor_name ' CONCAT
                     ' order by sum(sales.qty) desc ')) as f;