함수 생성 문(외부 테이블 함수)

이 CREATE FUNCTION 문은 사용자 정의 외부 테이블 함수를 데이터베이스 서버에 등록합니다. 사용자 정의 외부 테이블 함수는 서브 쎄렉트의 FROM 절에서 사용할 수 있습니다. 호출될 때마다 한 번에 한 행씩 반환함으로써 서브 엑셀렉트에 테이블을 반환합니다.

CREATE FUNCTION (외부 테이블) 호출

이 명령문은 애플리케이션 프로그램에 임베드되거나 대화식으로 실행될 수 있습니다. DYNAMICRULES RUN 동작이 적용된 경우에만 동적으로 준비할 수 있는 실행 가능한 명령입니다. 자세한 내용은 인증 ID와 동적 SQL을 참고하세요.

CREATE FUNCTION(외부 테이블)에 대한 권한 부여

아래에 정의된 권한 세트에는 다음 중 하나 이상이 포함되어야 합니다

  • 스키마의 CREATEIN 권한
  • SYSADM 또는 SYSCTRL 권한
  • 시스템 DBADM
  • 변경 시작설치 SYSOPR 권한(프로세스의 현재 SQLID가 SYSINSTL로 설정된 경우)변경 끝

스키마 이름과 일치하는 권한 부여 ID는 해당 스키마에 대한 CREATEIN 권한을 암시적으로 갖습니다.

변경 시작함수를 생성하는 데 사용되는 인증 ID가 설치 SYSADM 권한 또는 설치 SYSOPR 권한을 가지고 있고, 현재 SQLID가 SYSINSTL로 설정되어 있는 경우, 해당 함수는 시스템 정의 함수로 식별됩니다.변경 끝

함수가 테이블을 매개변수로 사용하거나, 고유 유형을 참조하거나, WLM(작업 부하 관리자) 환경에서 실행되는 경우 추가 권한이 필요합니다. 권한은 다음과 같습니다.

  • 함수의 입력 매개변수인 테이블에 대한 SELECT 권한.
  • 각 기능의 고유 유형에 대한 사용 권한.
  • 지정된 WLM 환경에서 프로그램을 생성할 수 있는 권한. 이 인증은 RACF® 와 같은 외부 보안 제품에서 얻습니다.

보안 옵션을 지정한 경우 다음 추가 권한 중 하나 이상이 필요합니다:

  • SECADM 권한
  • 보안 객체 생성 권한

사용 권한 세트(V):

문이 애플리케이션 프로그램에 포함된 경우 권한 집합은 플랜 또는 패키지의 소유자가 보유한 권한입니다. 소유자가 역할인 경우, 암시적 스키마 매칭이 적용되지 않으며 이 역할은 이전에 나열된 조건 중 하나를 포함해야 합니다.

이 문장이 동적으로 준비되고 ROLE AS OBJECT OWNER 절이 지정된 신뢰할 수 있는 컨텍스트에서 실행되지 않는 경우, 권한 집합은 프로세스의 SQL 인증 ID가 보유한 권한 집합입니다. 스키마 이름이 프로세스의 SQL 인증 ID와 동일하지 않은 경우, 다음 조건 중 하나가 충족되어야 합니다

  • 특권 세트에는 SYSADM 또는 SYSCTRL 권한이 포함됩니다.
  • 프로세스의 SQL 인증 ID는 스키마에 대한 CREATEIN 권한을 가지고 있습니다.

CREATE FUNCTION (외부 테이블) 구문

구문 다이어그램 읽기생략 시각적 구문 다이어그램CREATE FUNCTIONfunction-name( ,parameter-declaration ) RETURNS TABLE(,열 이름데이터 유형AS LOCATOR1)GENERIC TABLE2 option-list
참고:
  • 1 AS LOCATOR는 LOB 데이터 유형 또는 LOB 데이터 유형을 기반으로 하는 별개의 유형에만 지정할 수 있습니다.
  • 2 이 조항과 옵션 목록에 있는 다음 조항은 순서에 상관없이 지정할 수 있습니다.

매개변수 선언:

구문 다이어그램 읽기생략 시각적 구문 다이어그램parameter-name매개변수형

매개변수 유형:

구문 다이어그램 읽기생략 시각적 구문 다이어그램데이터 유형AS LOCATOR1TABLE LIKE테이블 이름view-nameAS LOCATOR
참고:
  • 1 AS LOCATOR는 LOB 데이터 유형 또는 LOB 데이터 유형을 기반으로 하는 별개의 유형에만 지정할 수 있습니다.

데이터 유형:

구문 다이어그램 읽기생략 시각적 구문 다이어그램built-in-typedistinct-type-name

내장형:

구문 다이어그램 읽기생략 시각적 구문 다이어그램SMALLINTINTEGERINTBIGINTDECIMALDECNUMERIC(5,0)( 정수, 정수)FLOAT(53)( 정수)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1 )( 정수)CHARACTERCHARVARYINGVARCHAR( 정수)CCSIDASCIIEBCDICUNICODEFORSBCSMIXEDBITDATACHARACTERCHARLARGE OBJECTCLOB(1M)( 정수KMG)CCSIDASCIIEBCDICUNICODEFORSBCSMIXEDDATAGRAPHIC(1)( 정수)VARGRAPHIC(정수)DBCLOB(1M)( 정수KMG)CCSIDASCIIEBCDICUNICODEBINARY(1)( 정수)BINARY VARYINGVARBINARY( 정수)BINARY LARGE OBJECTBLOB(1M)( 정수KMG)DATETIMETIMESTAMP(6)(정수)WITHOUT TIME ZONEWITH TIME ZONEROWID

option-list : (option-list의 절은 어떤 순서로든 지정할 수 있습니다.)

구문 다이어그램 읽기생략 시각적 구문 다이어그램SPECIFICspecific-namePARAMETER1CCSIDASCIIEBCDICUNICODEVARCHARNULTERMSTRUCTUREEXTERNAL NAME문자열식별자 LANGUAGE ASSEMBLECCOBOLPLI PARAMETER STYLE SQLNOT DETERMINISTICDETERMINISTICFENCEDRETURNS NULL ON NULL INPUTCALLED ON NULL INPUTREADS SQL DATACONTAINS SQLNO SQLEXTERNAL ACTIONNO EXTERNAL ACTIONNO PACKAGE PATHPACKAGE PATH패키지 경로NO SCRATCHPADSCRATCHPAD100길이NO FINAL CALLFINAL CALLDISALLOW PARALLELNO DBINFODBINFOCARDINALITY정수NO COLLIDCOLLID컬렉션 IDWLM ENVIRONMENT이름( 이름)ASUTIME NO LIMITASUTIMELIMIT정수STAY RESIDENT NOSTAY RESIDENT YESPROGRAM TYPE SUBPROGRAM TYPE MAINSECURITY DB2SECURITYUSERDEFINERRUN OPTIONS실행 옵션INHERIT SPECIAL REGISTERSDEFAULT SPECIAL REGISTERSSTATIC DISPATCHSTOP AFTER SYSTEM DEFAULT FAILURESSTOP AFTER정수FAILURESCONTINUE AFTER FAILURENOT SECUREDSECURED
참고:
  • 1 동일한 절은 한 번 이상 지정할 수 없습니다.

CREATE FUNCTION (외부 테이블)에 대한 설명

함수 이름
사용자 정의 함수를 명명합니다. 이름은 스키마 이름에 의해 내재적으로 또는 명시적으로 규정화됩니다. 더 자세한 정보는 스키마와 함수 이름 선택하기CREATE FUNCTION 문(개요) 에서 스키마의 함수 고유성 결정하기를 참고하세요.
(매개변수 선언,…)
함수의 입력 매개변수 개수를 식별하고, 각 매개변수의 데이터 유형을 지정합니다. 함수에 대한 모든 매개변수는 입력 매개변수이며, null이 될 수 있습니다. 함수가 수신할 것으로 예상하는 각 매개변수 리스트에는 한 항목만 있어야 합니다. 필수는 아니지만, 각 매개변수에 이름을 부여할 수 있습니다.
함수는 매개변수를 갖지 않을 수도 있습니다. 이 경우 빈 괄호 세트를 다음과 같이 코드화해야 합니다.
    CREATE FUNCTION WOOFER()
parameter-name
입력 매개변수의 이름을 지정합니다. 이름은 SQL 식별자이며, 매개변수 목록에 있는 각 이름은 다른 이름과 같지 않아야 합니다. 매개변수 이름과 열 이름에 같은 이름을 사용할 수 없습니다.
데이터 유형
매개변수의 데이터 유형을 지정합니다. 데이터 유형은 기본 제공 데이터 유형 또는 사용자 정의 고유 유형일 수 있습니다.
내장형
입력 매개변수의 자료 유형은 내장 자료 유형입니다. 기본 제공 데이터 유형에 대한 설명은 CREATE TABLE 문의 데이터 유형built-in-type 설명을 참조하세요.

문자 또는 그래픽 데이터 유형의 파라미터의 경우, PARAMETER CCSID 절 또는 CCSID 절은 파라미터의 인코딩 체계를 나타냅니다. 이 두 가지 항목 중 하나를 지정하지 않으면 설치 패널 DSNTIPF의 DEF ENCODING SCHEME 필드 값이 인코딩 체계로 사용됩니다.

고유 유형 이름
입력 매개변수의 자료 유형은 고유한 자료 유형입니다. 매개변수의 길이, 정확도, 규모, 하위 유형 또는 인코딩 체계 속성은 고유 유형의 원본 유형의 속성입니다.

스키마 이름 없이 고유 유형의 이름을 지정하면, Db2 가 SQL 경로에서 스키마를 검색하여 스키마 이름을 확인합니다.

문자 데이터 유형의 매개변수에는 암시적 또는 명시적으로 지정된 하위 유형(BIT, SBCS 또는 MIXED)이 있지만, 함수 프로그램은 모든 하위 유형의 문자 데이터를 받을 수 있습니다. 따라서 함수가 호출될 때 입력 데이터가 매개변수의 하위 유형으로 변환될 수 있습니다. 실제로 DBCS 문자를 포함하는 혼합된 데이터가 SBCS 하위 유형으로 선언된 입력 매개변수의 값으로 사용될 경우 오류가 발생합니다.

날짜/시간 데이터 유형 또는 고유 유형의 매개변수는 다른 데이터 유형으로 함수에 전달됩니다

  • 날짜/시간 유형의 매개변수는 문자 데이터 유형으로 전달되며, 데이터는 ISO 형식으로 전달됩니다.

    날짜/시간 유형 매개변수에 대한 인코딩 체계는 임의의 문자 또는 그래픽 문자열 매개변수에 대해 암시적 또는 명시적으로 지정된 인코딩 체계와 동일합니다. 문자 또는 그래픽 문자열 매개변수가 전달되지 않으면, 인코딩 체계는 설치 패널 DSNTIPF의 DEF ENCODING SCHEME 필드 값입니다.

  • 구별 유형 매개변수는 구별 유형의 소스 유형으로 전달됩니다.
AS LOCATOR
매개변수의 값에 대한 로케이터는 실제 값 대신 함수에 전달되도록 지정합니다. LOB 데이터 유형 또는 LOB 데이터 유형을 기반으로 하는 별개의 유형의 매개변수에 대해서만 AS LOCATOR를 지정하십시오. 값 대신 로케이터를 전달하면 더 적은 바이트가 함수로 전달될 수 있습니다(특히, 매개변수 값이 아주 큰 경우).

AS LOCATOR 절은 데이터 유형의 승격 가능 여부 판별에 영향이 없으며 함수 결정에 사용되는 함수 서명에도 영향이 없습니다.

TABLE LIKE table-name 또는 view-name AS LOCATOR
매개변수가 전환표임을 지정합니다. 그러나 함수가 호출되면, 전환 테이블의 실제 값은 함수로 전달되지 않습니다. 대신 단일 값이 전달됩니다. 이 단일 값은 테이블의 로케이터이며, 함수는 이 값을 사용하여 전환 테이블의 열에 액세스합니다. 테이블 매개변수가 있는 함수는 트리거의 트리거된 동작에서만 호출할 수 있습니다.

TABLE LIKE를 사용하면 전환 테이블에 대한 암시적 정의를 제공합니다. 전환 테이블은 식별된 테이블 또는 보기와 동일한 수의 열을 갖도록 지정합니다. 테이블이 지정된 경우, 전환 테이블에는 테이블에 암시적으로 숨겨진 것으로 정의된 열이 포함됩니다. 열은 식별된 테이블 또는 뷰와 동일한 데이터 유형, 길이, 정밀도, 스케일, 하위 유형, 인코딩 체계를 가지며, 이는 카탈로그 테이블 SYSCOLUMNS와 SYSTABLESPACE에 설명되어 있습니다. 열의 수와 그 열의 속성은 함수 생성 문이 처리될 때 결정됩니다. 표의 열 수나 그 열의 속성에 대한 후속 변경 사항은 함수의 매개변수에 영향을 미치지 않습니다.

테이블 이름 또는 뷰 이름은 현재 서버에 존재하는 테이블 또는 뷰를 식별해야 합니다. 뷰에는 길이 0인 열이 있을 수 없습니다. 이름이 선언된 임시 테이블을 식별해서는 안 됩니다. 식별된 테이블은 XML 컬럼을 포함할 수 있지만, 함수는 해당 XML 컬럼을 참조할 수 없습니다. 이름은 트리거의 전환 테이블과 관련된 테이블과 같은 이름일 필요는 없습니다. 자격이 없는 테이블 또는 뷰 이름은 다음 규칙에 따라 암시적으로 자격이 부여됩니다

  • CREATE FUNCTION 문이 프로그램에 포함되어 있는 경우, 계획 또는 패키지가 생성되거나 마지막으로 재설정될 때 QUALIFIER 바인드 옵션의 권한 부여 ID가 암시적 한정자입니다. QUALIFIER를 사용하지 않는 경우, 암시적 한정자는 플랜 또는 패키지의 소유자입니다.
  • CREATE FUNCTION 구문이 동적으로 준비된 경우, 암시적 한정자는 CURRENT SCHEMA 특수 레지스터의 SQL 인증 ID입니다.

함수가 호출되면, 테이블 로케이터에 의해 식별된 전환 테이블의 해당 열과 TABLE LIKE 절에 식별된 테이블 또는 뷰는 동일한 정의를 가져야 합니다. 이 열의 데이터 유형, 길이, 정밀도, 배율, 인코딩 체계가 정확히 일치해야 합니다. CREATE FUNCTION 구문이 실행될 때의 테이블 또는 뷰에 대한 설명이 사용됩니다.

또한, 전환 테이블의 FOR BIT DATA 열은 정의에서 지정된 테이블의 해당 열이 FOR BIT DATA로 정의되지 않은 테이블 매개변수에 대한 입력으로 전달될 수 없습니다. (정의는 CREATE FUNCTION 구문에서 발생합니다.) 마찬가지로, FOR BIT DATA가 아닌 전환 테이블의 문자열 열은 정의에서 해당 테이블의 해당 열이 FOR BIT DATA로 정의된 테이블 매개변수에 대한 입력으로 전달될 수 없습니다.

테이블 로케이터 사용에 대한 자세한 내용은 사용자 정의 함수 또는 저장 프로시저에서 전환 테이블에 액세스하기를 참조하세요.

RETURNS TABLE(column-name data-type...)
함수의 출력이 테이블임을 식별합니다. 키워드 뒤에 오는 괄호는 테이블의 열 이름과 데이터 유형 목록을 포함합니다.
column-name
열의 이름을 지정합니다. 이 이름은 SQL 식별자이며 함수의 RETURNS TABLE 절 내에서 고유해야 합니다.
데이터 유형
컬럼의 데이터 유형을 지정합니다. 열은 널값 가능 여부가 있습니다.
AS LOCATOR
함수가 실제 값이 아니라 값에 대한 로케이터를 리턴함을 지정합니다. LOB 자료 유형을 기초로 한 고유한 유형이나 LOB 자료 유형일 경우에만 AS LOCATOR를 지정할 수 있습니다.
RETURNS GENERIC TABLE
함수의 출력이 일반 테이블임을 지정합니다. 이 옵션은 LANGUAGE C도 지정된 경우에만 지정할 수 있습니다.

테이블 함수를 서브셀렉트의 타입이 지정된 상관 관계 절을 사용하여 참조할 때, 열의 이름과 데이터 유형을 선언해야 합니다.

자세한 내용은 typed-correlation-clause를 참조하십시오.

구체적인 specific-name
함수에 대한 고유명을 지정합니다. 이름은 내재적 또는 명시적으로 스키마명으로 규정됩니다. 스키마 이름을 포함한 이름은 현재 서버에 존재하는 다른 함수의 특정 이름을 식별해서는 안 됩니다.

specific-name의 규정되지 않은 양식은 SQL ID입니다. 적합한 형식은 SQL 식별자(스키마 이름) 뒤에 마침표와 SQL 식별자가 오는 형식입니다.

스키마 이름을 지정하지 않으면 함수 이름(function-name) 의 명시적 또는 암시적 스키마 이름과 동일합니다. 스키마 이름을 지정하는 경우, 함수 이름의 명시적 또는 암시적 스키마 이름과 동일해야 합니다.

SPECIFIC 절을 지정하지 않으면 기본 특정 이름은 함수의 이름입니다. 그러나 함수 이름이 고유한 특정 이름을 제공하지 않거나 함수 이름이 단일 별표인 경우, Db2 는 다음과 같은 형식으로 특정 이름을 생성합니다
SQLxxxxxxxxxxxx
'xxxxxxxxxxxx' 는 이름을 고유하게 만드는 12개의 문자열입니다.

구체적인 이름은 SYSROUTINES 카탈로그 테이블의 SPECIFIC 열에 저장됩니다. 특정 이름을 사용하면 여러 SQL 문(ALTER FUNCTION, COMMENT, DROP, GRANT, REVOKE 등)과 Db2 명령(START FUNCTION, STOP FUNCTION, DISPLAY FUNCTION)에서 함수를 고유하게 식별할 수 있습니다. 그러나, 함수를 고유명으로 호출할 수 없습니다.

PARAMETER CCSID 또는 VARCHAR
CCSID
문자 또는 그래픽 문자열 매개변수에 대한 인코딩 체계가 ASCII, EBCDIC 또는 UNICODE인지 여부를 나타냅니다. 기본 인코딩 체계는 매개변수 목록의 CCSID 절 또는 RETURNS TABLE 절에 지정된 값, 또는 설치 패널 DSNTIPF의 DEF ENCODING SCHEME 필드에 지정된 값입니다.

이 절은 문자 또는 그래픽 문자열 매개변수에 대한 인코딩 체계를 편리하게 지정할 수 있는 방법을 제공합니다. 이 PARAMETER CCSID 절 외에 개별 파라미터에 대한 개별 CCSID 절이 지정된 경우, 모든 CCSID 절 에 지정된 값은 이 절에 지정된 값과 동일해야 합니다.

이 절은 메시지 토큰과 DBINFO와 같은 루틴의 시스템 생성 매개변수에 사용되는 인코딩 체계를 지정합니다.

VARCHAR
LANGUAGE C를 지정하는 함수에 대해, 함수의 출력을 포함하여, 길이가 다양한 문자열 파라미터의 값을 표현하는 방법을 지정합니다.

이 옵션은 LANGUAGE C도 지정된 경우에만 지정할 수 있습니다.

중간 용어
가변 길이 문자열 매개변수가 NUL로 끝나는 문자열 형태로 표시되도록 지정합니다.
구조
가변 길이 문자열 매개변수가 VARCHAR 구조 형태로 표시되도록 지정합니다.

PARAMETER VARCHAR 절을 사용하면, PARAMETER CCSID와 같이 개별 매개변수의 VARCHAR 형식을 지정할 수 없습니다. PARAMETER VARCHAR 절은 함수의 매개변수 목록과 RETURNS TABLE 절에 있는 매개변수에만 적용됩니다. 메시지 토큰과 DBINFO와 같은 루틴의 시스템 생성 매개변수에는 적용되지 않습니다.

데이터 공유 환경에서는 데이터 공유 그룹의 모든 구성원이 해당 절을 지원하기 전까지는 PARAMETER VARCHAR 절을 지정해서는 안 됩니다. 어떤 그룹 구성원이 이 조항을 지지하고 다른 그룹 구성원이 지지하지 않는 경우, 외부 루틴에 PARAMETER VARCHAR가 지정되어 있으면, 루틴은 어떤 그룹 구성원이 루틴을 호출하는지에 따라 다른 매개변수 형식을 만나게 됩니다.

EXTERNAL
등록되는 함수가 외부 프로그래밍 언어로 작성된 코드를 기반으로 하며 해당 언어의 문서화된 연결 규칙과 인터페이스를 준수함을 명시합니다.

NAME 절을 명시하지 않으면 'NAME function-name '이 암시적으로 사용됩니다. 이 경우, 함수 이름은 8자보다 길어서는 안 됩니다.

NAME 문자열 또는 식별자
함수의 논리를 구현하는 사용자 작성 코드를 포함하는 로드 모듈의 이름을 식별합니다.

LANGUAGE의 다른 값의 경우, 이름은 8자 이하의 문자열 상수일 수 있습니다. 로드 모듈의 명명 규칙을 준수해야 합니다. 모듈 이름의 첫 글자 및 그 다음 글자로 자국어 확장자를 사용할 수 있습니다.

Db2 함수가 호출될 때 로드 모듈을 로드합니다. 로드 모듈은 함수 본문이 포함된 프로그램이 컴파일되고 링크 편집될 때 생성됩니다. LOAD 모듈은 CREATE FUNCTION 구문이 실행될 때 존재할 필요가 없습니다. 그러나 함수가 호출될 때 현재 서버에 존재하고 액세스할 수 있어야 합니다.

다음 방법 중 하나로 외부 절을 지정할 수 있습니다
  EXTERNAL
  EXTERNAL NAME PKJVSP1
  EXTERNAL NAME 'PKJVSP1'
외부 프로그램 이름을 지정하는 경우, NAME 키워드를 사용해야 합니다. 예를 들어, 다음 구문은 유효하지 않습니다
  EXTERNAL PKJVSP1
LANGUAGE
함수 프로그램이 작성된 응용 프로그램 프로그래밍 언어를 지정합니다. 모든 프로그램은 IBM® 의 Language Environment® 환경에서 실행되도록 설계되어야 합니다.
ASSEMBLE
함수는 Assembler로 작성됩니다.
C
이 함수는 C 또는 C++로 작성됩니다. VARCHAR 절은 LANGUAGE C가 지정된 경우에만 지정할 수 있습니다.
COBOL
이 함수는 객체 지향 언어 확장을 포함하여 COBOL 로 작성되었습니다.
PLI
함수는 PL/I로 작성됩니다.
PARAMETER STYLE SQL
함수 프로그램이 입력 매개변수를 받고 호출하는 SQL 문에 반환 값을 전달하는 데 사용하는 연결 규칙을 지정합니다.

PARAMETER STYLE SQL은 입력 및 출력에 대해 null 값을 전달하는 것을 지원하는 매개변수 전달 규칙을 지정합니다.

RETURNS TABLE 절이 명시되어 있는 경우, 호출하는 SQL 문과 함수 사이에 전달되는 매개변수는 다음과 같습니다
  • 함수에 지정된 입력 매개변수에 대한 n개의 매개변수
  • rETURNS TABLE 절에 명시된 함수의 결과 열에 대한 m개의 매개변수
  • 입력 변수에 대한 표시 변수의 매개 변수
  • rETURNS TABLE 절에 명시된 함수의 결과 열의 지표 변수에 대한 m개의 매개 변수
  • 반환될 SQLSTATE Db2
  • 함수의 정규화된 이름
  • 함수의 구체적인 이름
  • 반환될 SQL 진단 문자열 Db2
  • 스크래치패드, 스크래치패드가 지정된 경우
  • 통화 유형
  • DBINFO가 지정된 경우, DBINFO 구조
RETURNS GENERIC TABLE 절이 지정된 경우, 호출하는 SQL 문과 함수 사이에 전달되는 매개변수는 다음과 같습니다
  • 함수에 지정된 입력 매개변수에 대한 n개의 매개변수
  • 입력 변수에 대한 표시 변수의 매개 변수
  • rETURNS GENERIC TABLE 절에 명시된 함수의 결과 열에 대한 m개의 매개변수
  • 다음과 같은 내용을 포함하는 결과 테이블 설명자:
    • SELECT 문의 table-function-referencetyped-correlation-clause 에 지정된 함수의 m 결과 열
    • 결과 열의 값에 대한 m, 4바이트 주소 배열
    • 결과 열의 m, null 표시기 배열
  • 반환될 SQLSTATE Db2
  • 함수의 정규화된 이름
  • 함수의 구체적인 이름
  • 반환될 SQL 진단 문자열 Db2
  • 스크래치패드, 스크래치패드가 지정된 경우
  • 통화 유형
  • DBINFO가 지정된 경우, DBINFO 구조

전달되는 매개변수 목록의 구조에 대한 자세한 내용은 DBINFO 구조를 참조하십시오.

NOT DETERMINISTIC 또는 DETERMINISTIC
함수가 동일한 입력 인자로 함수가 호출될 때마다 동일한 결과를 반환하는지 여부를 지정합니다.
NOT DETERMINISTIC
이 함수는 동일한 입력 인자로 함수를 호출할 때마다 동일한 결과를 반환하지 않을 수 있습니다. 함수는 결과에 영향을 주는 일부 상태 값에 따라 다릅니다. Db2 이 정보를 사용하여 이 함수를 참조하는 SELECT 및 SQL 데이터 변경 문을 처리할 때 뷰와 테이블 표현식의 병합을 비활성화합니다. 결정적이지 않은 함수의 예로는 난수를 생성하는 함수나 SQL 문이 포함된 함수가 있습니다.

기본값은 비결정론입니다.

DETERMINISTIC
이 함수는 동일한 입력 인자로 함수가 호출될 때마다 항상 동일한 결과를 반환합니다. 결정적 함수의 예로는 입력값의 제곱근을 구하는 함수가 있습니다. Db2 이 정보를 사용하여 이 함수를 참조하는 SELECT 및 SQL 데이터 변경 문에 대한 뷰와 테이블 표현식의 병합을 가능하게 합니다. DETERMINISTIC은 기본값이 아닙니다. 해당되는 경우, 이 함수를 참조하는 SQL 문에 대해 최적의 액세스 경로가 선택되지 않도록 하려면 DETERMINISTIC을 지정하십시오.

Db2 함수 프로그램이 DETERMINISTIC 또는 NOT DETERMINISTIC의 사양과 일치하는지 확인하지 않습니다.

FENCED
Db2 의 저장을 손상시키지 않도록 함수가 외부 주소 공간에서 실행되도록 지정합니다.

FENCED가 기본값입니다.

RETURNS NULL ON NULL INPUT 또는 CALLED ON NULL INPUT
실행 시간에 입력 인수가 널(null)인 경우 함수 호출 여부를 지정합니다.
RETURNS NULL ON NULL INPUT
입력 인자 중 하나가 null이면 함수는 호출되지 않습니다. 결과는 빈 테이블입니다. 즉, 행이 없는 테이블입니다. RETURNS NULL ON INPUT이 기본값입니다.
CALLED ON NULL INPUT
입력 인수가 null인지 여부에 관계없이 함수가 호출되므로 함수가 null 인수 값을 테스트하는 역할을 합니다. 이 함수는 논리에 따라 빈 테이블을 반환할 수 있습니다.
SQL 데이터 기, SQL 포함, 또는 SQL 없음
이 루틴이 실행하거나 호출할 수 있는 SQL 문과 중첩된 루틴의 분류를 지정합니다. 데이터베이스 관리자는 함수가 발행한 SQL 문장과 루틴이 로컬에서 호출한 모든 루틴이 이 사양과 일치하는지 확인합니다. 중첩된 원격 루틴이 호출된 경우에는 확인이 수행되지 않습니다. 각 문의 분류에 대해서는 루틴에 대한 SQL 문의 데이터 액세스 분류를 참조하십시오.
READS SQL DATA
이 함수는 READS SQL DATA, CONTAINS SQL 또는 NO SQL의 데이터 액세스 표시가 있는 문을 실행할 수 있음을 지정합니다. 이 함수는 데이터를 수정하는 SQL 문을 실행할 수 없습니다.
CONTAINS SQL
이 함수는 CONTAINS SQL 또는 NO SQL의 액세스 표시가 있는 SQL 문만 실행할 수 있도록 지정합니다. 이 함수는 데이터를 읽거나 수정하는 문을 실행할 수 없습니다.
NO SQL
이 함수는 데이터 액세스 분류가 NO SQL인 SQL 문만 실행할 수 있도록 지정합니다.
EXTERNAL ACTION 또는 NO EXTERNAL ACTION
Db2 가 관리하지 않는 객체의 상태를 변경하는 작업을 수행할지 여부를 지정합니다. 외부 조치의 예는 메시지를 보내거나 레코드를 파일에 쓰는 것입니다.

Db2 는 기능에 RRS 첨부 파일을 사용하기 때문에, Db2 는 RRS를 사용하는 다른 리소스 관리자와 함께 2단계 커밋에 참여할 수 있습니다. RRS를 사용하지 않는 리소스 관리자의 경우, 비Db2 리소스에 대한 커밋 또는 롤백 작업의 조정이 없습니다.

EXTERNAL ACTION
이 기능은 Db2 가 관리하지 않는 객체의 상태를 변경하는 작업을 수행할 수 있습니다.

EXTERNAL ACTION을 지정하면, Db2:

  • SELECT 구문과 SQL 데이터 변경 문에서 함수를 참조하는 뷰와 테이블 표현을 구체화합니다. 이 구체화는 이 함수를 참조하는 SQL 문에 대해 선택된 액세스 경로에 부정적인 영향을 미칠 수 있습니다. 기능에 외부 작업이 없는 경우에는 EXTERNAL ACTION을 지정하지 마십시오.
  • FETCH 조작 사이에 함수를 하나의 태스크 제어 블록(TCB)에서 또다른 태스크 제어 블록으로 이동하지 않습니다.
  • 커서가 닫힐 때까지 또다른 함수 또는 스토어드 프로시저가 TCB를 사용하도록 허용하지 않습니다. 이 규칙은 WITH HOLD로 선언된 커서에도 적용됩니다.

Db2 외부에서 커밋 및 롤백 작업의 통제하에 있는 리소스에 대한 유일한 변경 사항은 RRS 통제하에 이루어진 변경 사항입니다.

외부 작업이 기본값입니다.

NO EXTERNAL ACTION
이 함수는 Db2 가 관리하지 않는 객체의 상태를 변경하는 어떠한 조치도 취하지 않습니다. Db2 이 정보를 사용하여 이 함수를 참조하는 SELECT 및 SQL 데이터 변경 문 에 대한 뷰와 테이블 표현식의 병합을 가능하게 합니다. 해당되는 경우, 이 함수를 참조하는 SQL 문에 대해 최적의 액세스 경로가 선택되지 않도록 하려면 외부 작업 없음(NO EXTERNAL ACTION)을 지정하십시오.

글로벌 변수의 범위는 루틴의 범위를 벗어나는 것이지만, NO EXTERNAL ACTION이 지정된 경우 루틴 본문에서 글로벌 변수를 설정할 수 있습니다.

패키지 경로 없음 또는 패키지 경로 package-path
함수가 실행될 때 사용할 패키지 경로를 지정합니다. 이 목록은 DBRM이 기능과 연결되어 있는 가능한 패키지 모음입니다.
패키지 경로 없음
함수에 대한 패키지 컬렉션 목록이 함수를 호출하는 프로그램의 패키지 컬렉션 ID 목록과 동일함을 지정합니다. 함수를 호출하는 프로그램이 패키지를 사용하지 않는 경우, Db2 는 CURRENT PACKAGE PATH 특수 레지스터, CURRENT PACKAGESET 특수 레지스터 또는 PKLIST 바인드 옵션(이 순서대로)을 사용하여 패키지를 해결합니다. Db2 가 이 세 가지 항목을 어떻게 사용하는지에 대한 정보는 애플리케이션 계획 바인딩을 참고하세요.
패키지 경로 패키지 경로
SET CURRENT PACKAGE PATH 특수 레지스터와 같은 형식으로 패키지 모음 목록을 지정합니다.

COLLID 절이 PACKAGE PATH와 함께 지정된 경우, 함수가 호출될 때 COLLID 절은 무시됩니다.

함수가 생성될 때 제공되는 패키지 경로 값은 함수가 호출될 때 확인됩니다. 패키지 경로에 SESSION_USER(또는 USER), PATH, PACKAGE PATH가 포함되어 있는 경우, 패키지 경로 값 을 확인할 때 오류가 반환됩니다.

스크래치패드 또는 스크래치패드 없음
Db2 가 이 기능에 스크래치 패드를 제공하는지 여부를 지정합니다. 함수는 재진입 가능해야 하며, 스크래치패드는 함수가 한 번의 호출에서 다음 호출로 정보를 저장할 수 있는 영역을 제공합니다.
NO SCRATCHPAD
스크래치패드가 할당되지 않고 함수에 전달되도록 지정합니다. NO SCRATCHPAD가 기본값입니다.
스크래치패 드 길이
함수가 처음으로 호출될 때, Db2 가 스크래치패드에 사용할 메모리를 할당하도록 지정합니다. 스크래치 패드는 다음과 같은 특징을 가지고 있습니다:
  • 길이는 1~32767 범위여야 합니다. 디폴트 값은 100바이트입니다.
  • Db2 스크래치패드를 모든 0 (X'00')으로 초기화합니다.
  • 스크래치 패드의 범위는 SQL문입니다. SQL 문에서 함수를 참조할 때마다 스크래치패드가 있습니다. 예를 들어, 함수 UDFX가 SCRATCHPAD 키워드로 정의되었다고 가정하면 두 개의 스크래치 패드가 다음 SQL문의 UDFX에 대한 두 개의 참조에 할당됩니다.
        SELECT *
        FROM TABLE (UDFX(A)), TABLE (UDFX(B));
  • 스크래치 패드는 지속적입니다. Db2 함수를 한 번 호출할 때부터 다음 번 호출할 때까지 그 내용을 보존합니다. 함수가 스크래치패드에 변경한 내용은 다음 호출 시에도 그대로 유지됩니다. Db2 sQL 문 실행을 시작할 때 스크래치패드를 초기화합니다. Db2 상관된 서브쿼리가 실행되기 시작할 때 스크래치패드를 초기화하지 않습니다.
  • 스크래치 패드는 이 기능이 획득하는 시스템 자원의 중심점이 될 수 있습니다. 함수가 시스템 자원을 획득하는 경우, 함수가 해당 시스템 자원을 해제할 수 있도록 Db2 가 함수를 한 번 더 호출하도록 FINAL CALL을 지정합니다.

Db2 함수가 호출될 때마다, 스크래치패드의 주소를 포함하는 함수에 추가 인자를 전달합니다.

SCRATCHPAD를 지정하면, Db2:

  • FETCH 조작 사이에 함수를 하나의 태스크 제어 블록(TCB)에서 또다른 태스크 제어 블록으로 이동하지 않습니다.
  • 커서가 닫힐 때까지 또다른 함수 또는 스토어드 프로시저가 TCB를 사용하도록 허용하지 않습니다. 이 규칙은 WITH HOLD로 선언된 커서에도 적용됩니다.
NO FINAL CALL 또는 FINAL CALL
함수에 대한 첫 번째 호출마지막 호출 이 이루어지는지 여부를 지정합니다.
NO FINAL CALL
첫 번째 호출과 마지막 호출은 함수에 대해 수행되지 않습니다. NO FINAL CALL이 기본값입니다.
FINAL CALL
해당 함수에 대한 첫 번째 호출과 마지막 호출이 이루어지고, 하나 이상의 open, fetch, close 호출이 이루어집니다.
호출 유형은 다음과 같습니다.
첫 번째 호출
첫 번째 호출 은 함수가 최종 호출로 정의된 경우에만 발생합니다. 첫 번째 호출 전에 스크래치 패드는 0으로 설정됩니다. 인수 값은 함수에 전달되며, 함수는 메모리를 확보하거나 다른 일회성 리소스 초기화를 수행할 수 있습니다. 그러나 이 함수는 Db2 에 데이터를 반환해서는 안 되지만, SQL 상태와 진단 메시지 인수의 반환 값을 설정할 수 있습니다.
OPEN 호출
함수가 에러를 반환하지 않는 한, 공개 호출이 발생합니다. 스크래치 패드는 함수가 NO FINAL CALL로 정의된 경우에만 바이너리 0으로 설정됩니다. 인수 값은 함수에 전달되며, 함수는 필요한 일회성 초기화 작업을 수행할 수 있습니다. 그러나 이 함수는 Db2 에 데이터를 반환해서는 안 됩니다.
FETCH 호출
첫 번째 호출 또는 열린 호출 중에 함수가 에러를 반환하지 않는 한, fetch 호출이 발생합니다. 인수 값은 함수에 전달되며, 함수가 데이터 행 또는 테이블 끝 조건을 반환할 것으로 예상합니다( Db2 ). 스크래치 패드도 함수에 전달되면, 이전 호출에서 변경되지 않은 상태로 유지됩니다.
CLOSE 호출
첫 번째 호출, 열린 호출 또는 가져온 호출 중에 함수가 오류를 반환하지 않는 한, 클로즈 호출이 발생합니다. SQL 인수 또는 SQL 인수 인덱스 값이 함수에 전달되지 않으며, 함수가 이러한 값을 검사하려고 시도할 경우 예측할 수 없는 결과가 발생할 수 있습니다. 스크래치 패드도 함수에 전달되면, 이전 호출에서 변경되지 않은 상태로 유지됩니다.

이 함수는 Db2 에 데이터를 반환해서는 안 되지만, SQL 상태와 진단 메시지 인수에 대한 반환 값을 설정할 수 있습니다. 또한, NO FINAL CALL로 정의된 함수는 가까스로 살아남더라도, 확보한 시스템 자원을 해제해야 합니다. (FINAL CALL로 정의된 함수는 최종 호출에서 획득한 자원을 해제해야 합니다.)

최종
최종 호출은 첫 번째 호출의 균형을 맞추고, 첫 번째 호출과 마찬가지로 함수가 FINAL CALL로 정의된 경우에만 발생합니다. 이 함수는 SQL 상태와 진단 메시지 인수에 대한 반환 값을 설정할 수 있습니다. 이 기능은 또한 확보한 시스템 자원을 해제해야 합니다. 다음과 같은 경우 최종 호출이 발생합니다.
  • 명령문의 끝: 커서 지향 명령문에서 커서가 닫히거나 명령문 실행이 완료될 경우.
  • 트랜잭션의 끝: 일반적인 명령문 처리의 끝이 발생하지 않을 경우. 예를 들어, 어떤 이유로 어플리케이션 논리가 커서 닫기를 생략할 경우.

커밋, 롤백 또는 중단 작업이 최종 호출을 유발하는 경우, 함수는 호출될 때 어떤 SQL 문도 실행할 수 없습니다.

DISALLOW PARALLEL
Db2 가 함수에 대해 병렬 처리를 고려하지 않도록 지정합니다.
NO DBINFO 또는 DBINFO
함수가 호출될 때 추가적인 상태 정보가 전달되는지 여부를 지정합니다.
NO DBINFO
추가 정보는 전달되지 않습니다. NO DBINFO가 기본값입니다.
DBINFO
함수가 호출될 때 추가 인수가 전달됩니다. 인수는 애플리케이션 실행 시간 권한 부여 ID, 스키마 이름, 함수가 삽입하거나 업데이트할 수 있는 테이블 또는 열의 이름, 함수를 호출한 데이터베이스 서버의 식별과 같은 정보를 포함하는 구조입니다. 인자와 그 구조에 대한 자세한 내용은 DBINFO 구조를 참고하세요.
카디널리티 정수
함수가 반환하는 예상 행 수를 지정합니다. 숫자는 최적화 용도로 사용됩니다. 정수의 값은 0-2147483647 범위여야 합니다.

카디널리티를 지정하지 않으면, Db2 는 유한 값을 가정합니다. 유한값은 RUNSTATS 유틸리티가 통계를 수집하지 않은 테이블에 대해 Db2 가 가정하는 값과 같습니다.

함수의 카디널리티가 무한한 경우(함수가 테이블의 끝 조건을 반환하지 않고 항상 행을 반환하는 경우), 테이블의 끝 조건이 올바르게 작동하도록 하는 쿼리가 중단될 수 있습니다. 따라서 GROUP BY와 ORDER BY를 포함하는 쿼리에서 이러한 함수를 사용하지 마십시오.

NO COLLID 또는 COLLID 컬렉션 ID
함수가 실행될 때 사용할 패키지 컬렉션을 식별합니다. 이 패키지는 함수 프로그램과 관련된 DBRM이 바인딩되는 패키지 모음입니다.
NO COLLID
함수를 호출하는 프로그램의 패키지 모음과 함수를 호출하는 프로그램의 패키지 모음이 동일합니다. 트리거가 함수를 호출하는 경우, 트리거 패키지의 컬렉션이 사용됩니다. 호출하는 프로그램이 패키지를 사용하지 않는 경우, Db2 는 CURRENT PACKAGE PATH 특수 레지스터, CURRENT PACKAGESET 특수 레지스터 또는 PKLIST 바인드 옵션(이 순서대로)을 사용하여 패키지를 해결합니다. 자세한 내용은 Db2 이 세 가지 항목을 사용하는 경우 패키지 목록을 확인하는 데 Db2 사용하는 값 재정의 에서 패키지 확인에 대한 정보를 참조하세요.

NO COLLID가 기본값입니다.

COLLID 컬렉션-id
외부가 실행될 때 사용될 패키지 컬렉션의 이름입니다.
WLM ENVIRONMENT
이 기능을 실행할 WLM(작업 관리자) 애플리케이션 환경을 식별합니다. WLM 환경의 이름 은 SQL 식별자입니다.

WLM 환경을 지정하지 않으면 설치 시에 지정된 WLM에 의해 설정된 저장 프로시저 주소 공간에서 기능이 실행됩니다.

이름
이 기능이 실행되어야 하는 WLM 환경. 다른 사용자 정의 함수 또는 저장 프로시저가 함수를 호출하고, 그 호출 루틴이 WLM 환경과 관련이 없는 주소 공간에서 실행 중인 경우, Db2 는 함수 요청을 다른 주소 공간으로 라우팅합니다.
(이름,*)
SQL 응용 프로그램이 함수를 직접 호출하면, 함수가 실행되는 WLM 환경.

다른 사용자 정의 함수 또는 저장 프로시저가 함수를 호출하는 경우, 함수는 호출 루틴이 사용하는 것과 동일한 환경에서 실행됩니다. 이 경우, 호출 루틴의 인증이 충분하기 때문에 WLM 환경에서 함수를 실행할 수 있는 권한이 확인되지 않습니다.

사용자는 지정된 WLM 환경에서 기능을 실행할 수 있는 적절한 권한을 가지고 있어야 합니다.

ASUTIME
함수를 한 번 호출할 때 실행할 수 있는 총 프로세서 시간(CPU 서비스 단위)을 지정합니다. 이 값은 자원 제한 사양 표의 ASUTIME 열과 관련이 없습니다.

함수를 디버깅할 때 함수가 루프에 걸리면 한도를 설정하는 것이 도움이 될 수 있습니다. 서비스 유닛에 대한 자세한 내용은 z/OS MVS 초기화 및 튜닝 가이드를 참조하세요.

NO LIMIT
서비스 단위에는 제한이 없습니다. NO LIMIT이 기본값입니다.
LIMIT 정수
CPU 서비스 단위 수의 제한은 1-2147483647 범위의 양의 정수 입니다. 절차가 지정된 값보다 더 많은 서비스 단위를 사용하는 경우, Db2 가 절차를 취소합니다. 절차에서 병렬 작업에 소비되는 CPU 사이클은 지정된 ASUTIME LIMIT에 기여하지 않습니다.
STAY RESIDENT
함수 종료 시 해당 함수의 로드 모듈이 메모리에 남아 있어야 하는지 여부를 지정합니다.
아니오
로드 모듈은 기능이 종료된 후 메모리에서 삭제됩니다. 재진입 불가능한 함수에는 NO를 사용하십시오. NO가 기본값입니다.
로드 모듈은 함수가 종료된 후에도 메모리에 남아 있습니다. 재진입 함수에는 YES를 사용하십시오.
PROGRAM TYPE
함수 프로그램이 메인 루틴으로 실행될 것인지, 서브루틴으로 실행될 것인지 지정합니다.
SUB
이 기능은 서브루틴으로 실행됩니다. SUB가 기본값입니다.
MAIN
이 기능은 기본 루틴으로 실행됩니다.
보안
RACF 와 같은 외부 보안 제품과 기능이 상호 작용하여 비 SQL 리소스에 대한 액세스를 제어하는 방법을 지정합니다.
Db2
이 기능은 외부 보안 환경을 필요로 하지 않습니다. 함수가 외부 보안 제품이 보호하는 자원에 액세스하는 경우, WLM 설정 스토어드 프로시저 어드레스 스페이스와 연관된 권한 부여 ID를 사용하여 액세스가 수행됩니다.

Db2이(가) 기본값입니다.

사용자
이 기능을 위해 외부 보안 환경을 구축해야 합니다. 이 함수가 외부 보안 제품이 보호하는 리소스에 액세스하는 경우, 이 액세스는 함수를 호출한 프로세스의 기본 인증 ID를 사용하여 수행됩니다.
DEFINER
이 기능을 위해 외부 보안 환경을 구축해야 합니다. 이 기능이 외부 보안 제품이 보호하는 리소스에 액세스하는 경우, 기능 소유자의 인증 ID를 사용하여 액세스가 수행됩니다.
실행 옵션 런타임 옵션
함수에 사용할 Language Environment 런타임 옵션을 지정합니다. 런타임 옵션은 254바이트를 넘지 않는 문자열로 지정해야 합니다. 실행 옵션을 지정하지 않거나 빈 문자열을 전달하지 않으면 Db2 은 Language Environment 에 실행 시간 옵션을 전달하지 않으며 Language Environment 은 설치 기본값을 사용합니다.

Language Environment 런타임 옵션에 대한 설명은 Language Environment 프로그래밍 참조를 참조 하세요.

상속 특수 레지스터 또는 기본 특수 레지스터
루틴에 진입할 때 특수 레지스터가 설정되는 방식을 지정합니다.
INHERIT SPECIAL REGISTERS
특수 레지스터의 값이 사용자 정의 함수 또는 저장 프로시저의 특수 레지스터 특성에 대한 표에 나열된 규칙에 따라 상속되도록 지정합니다.
기본 특수 레지스터
특수 레지스터가 사용자 정의 함수 또는 저장 프로시저의 특수 레지스터 특성에 대한 표의 규칙에 따라 기본값으로 초기화되도록 지정합니다.
STATIC DISPATCH
Db2 함수 해결 시, 함수 매개변수의 정적(또는 선언된) 유형에 따라 함수를 선택합니다. 기본값은 정적 디스패치입니다.
시스템 기본 실패 후 중지, nn 실패 후 중지, 또는 실패 후 계속
일정 횟수 이상의 실패가 발생한 후 루틴을 정지 상태로 만들 것인지 여부를 지정합니다.
STOP AFTER SYSTEM DEFAULT FAILURES
설치 패널 DSNTIPX의 MAX ABEND COUNT 필드 값으로 표시된 실패 횟수 이후에 이 루틴을 정지 상태로 두도록 지정합니다. 이는 기본값입니다.
Nn 실패 후 중단
Nn번의 실패 후에 이 루틴을 정지 상태로 두도록 지정합니다. Nn 값은 1-32767 사이의 정수일 수 있습니다.
CONTINUE AFTER FAILURE
실패한 후에는 이 루틴을 정지 상태로 두지 않도록 지정합니다.
NOT SECURED 또는 SECURED
행 접근 제어와 열 접근 제어에 대해 이 기능이 안전한지 여부를 지정합니다.
NOT SECURED
행 접근 제어 및 열 접근 제어에 대해 이 함수가 안전하지 않다고 간주하도록 지정합니다.

NOT SECURED 이 기본값입니다.

함수가 호출될 때, 함수의 인수는 테이블이 활성 열 액세스 제어를 사용할 때 열 마스크가 활성화된 열을 참조해서는 안 됩니다.

SECURED
행 접근 제어와 열 접근 제어에 대해 보안 기능을 고려하도록 지정합니다.

이 기능은 행 권한 또는 열 마스크에서 참조될 때 SECURED로 정의되어야 합니다.

함수 생성(외부 테이블)에 대한 참고 사항

모든 유형의 사용자 정의 기능에 대한 고려 사항:
모든 유형의 사용자 정의 함수에 적용되는 고려 사항은 함수 생성 문(개요)을 참조하십시오.
문자열 표현 고려 사항:
PARAMETER VARCHAR 절은 C 언어에서 NUL로 끝나는 문자열을 기본적으로 사용하기 때문에 LANGUAGE C 함수에 특정한 것입니다. VARCHAR 구조 표현은 문자열 데이터에 NUL-종결자가 포함되어 있는 것으로 알려진 경우에 유용합니다. 문자열 데이터에 NUL-terminator가 포함되어 있지 않다는 것을 보장할 수 없는 경우에도 유용합니다.

PARAMETER VARCHAR는 고정 길이 문자열, VARCHAR FOR BIT DATA, CLOB, DBCLOB 또는 암시적으로 생성된 파라미터에는 적용되지 않습니다. BIT DATA는 X'00' 문자를 포함할 수 있고, 그 값 표현은 길이 정보로 시작되기 때문에 이 조항은 VARCHAR FOR BIT DATA에 적용되지 않습니다. LOB 데이터에는 적용되지 않습니다. LOB 값 표현은 길이 정보로 시작하기 때문입니다.

PARAMETER VARCHAR는 외부 함수에 암시적으로 제공되는 선택적 매개변수에 적용되지 않습니다. 예를 들어, LANGUAGE C에 대한 CREATE FUNCTION 문은 SQLSTATE NULL로 종료된 문자열을 반환하는 PARAMETER STYLE SQL을 지정해야 합니다. 이 SQLSTATE는 VARCHAR 구조화된 형태로 표현되지 않습니다. 마찬가지로, 함수의 한정된 이름, 함수의 특정 이름, 또는 데이터베이스 관리자에게 반환되는 SQL 진단 문자열을 나타내는 어떤 매개변수도 VARCHAR 구조화된 형태로 표현되지 않습니다.

WLM 환경에서 외부 기능 실행하기:
WLM ENVIRONMENT 절을 사용하여 함수가 실행될 주소 공간을 식별할 수 있습니다. 다른 WLM 환경을 사용하면, 그룹의 프로그램을 다른 그룹의 프로그램과 분리시킬 수 있습니다. 예를 들어, 보안 요구 사항에 따라 프로그램을 분리하고 모든 급여 관련 애플리케이션을 하나의 WLM 환경에 배치할 수 있습니다. 이러한 애플리케이션은 직원 급여와 같은 데이터를 다루기 때문입니다.

사용자가 민감한 WLM 환경에서 함수를 정의하지 못하도록 방지하기 위해, Db2 는 외부 보안 관리자를 호출하여 사용자가 지정된 WLM 환경을 참조하는 CREATE FUNCTION 문을 실행할 권한이 있는지 확인합니다. 다음 예는 Db2 사용자 DB2USER1 가 WLM 환경에서 PAYROLL이라는 이름의 Db2 하위 시스템 DB2A 에서 함수를 등록할 수 있도록 권한을 부여하는 RACF 명령을 보여줍니다.

   PERMIT DB2A.WLMENV.PAYROLL CLASS(DSNR) ID(DB2USER1)  ACCESS(READ)

자세한 내용은 WLM 환경에서 저장 프로시저 생성을 위한 권한 관리를 참고하세요.

테이블 함수가 일반 테이블 함수인지 확인하기:
테이블 함수가 일반 테이블 함수인지 확인하려면, SYSIBM.SYSROUTINES 카탈로그 테이블을 쿼리하면 됩니다. 이 함수는 ROUTINETYPE 열의 값이 'F'이고 FUNCTIONTYPE 열의 값이 'T'일 때 RESULT_COLS 열의 값이 0(영)인 경우 일반 테이블 함수입니다.
대체 구문 및 동의어:
Db2Db2 제품군의 다른 제품과의 호환성을 제공하기 위해, Db2 는 다음과 같은 대체 구문을 지원합니다:
  • 변형(VARIANT)은 결정론적이지 않음을 의미하는 동의어입니다
  • 변형이 아닌 결정론적이라는 동의어
  • NOT NULL CALL의 동의어 RETURNS NULL ON NULL INPUT
  • NULL CALL은 CALLED ON NULL INPUT의 동의어입니다
  • PARAMETER STYLE DB2SQL 를 PARAMETER STYLE SQL의 동의어로 사용
  • TIMEZONE은 TIME ZONE의 대안으로 지정할 수 있습니다.

CREATE FUNCTION(외부 테이블) 예제

다음 예는 텍스트 관리 시스템에 있는 각 알려진 문서에 대해 단일 문서 식별자 열로 구성된 행을 반환하도록 작성된 테이블 함수를 등록합니다. 첫 번째 매개변수는 지정된 주제 영역과 일치시키고 두 번째 매개변수는 지정된 문자열을 포함합니다.

단일 세션의 맥락에서 테이블 함수는 항상 동일한 테이블을 반환하므로, DETERMINISTIC으로 정의됩니다. 또한, 테이블 함수는 병렬로 작동할 수 없기 때문에 DISALLOW PARALLEL 키워드가 추가되었습니다.

DOCMATCH의 출력 크기는 매우 다양하지만, CARDINALITY 20은 대표적인 값이며, Db2 를 돕기 위해 지정되었습니다.
    CREATE FUNCTION DOCMATCH (VARCHAR(30), VARCHAR(255))
                       RETURNS TABLE (DOC_ID CHAR(16))
      EXTERNAL NAME ABC
      LANGUAGE C
      PARAMETER STYLE SQL
      NO SQL
      DETERMINISTIC
      NO EXTERNAL ACTION
      FENCED
      SCRATCHPAD
      FINAL CALL
      DISALLOW PARALLEL
      CARDINALITY 20;
예 2: 다음 예는 일반 테이블 함수를 등록합니다
CREATE FUNCTION tf6(p1 VARCHAR(10))
	RETURNS GENERIC TABLE
	EXTERNAL NAME 'tf6'
	LANGUAGE C
	PARAMETER STYLE SQL
	DETERMINISTIC
	NO EXTERNAL ACTION
	FENCED
	SCRATCHPAD
	FINAL CALL;
LANGUAGE C를 명시해야 하며, 테이블 함수가 SELECT 절에서 참조될 때 결과 열의 이름과 데이터 유형을 선언해야 합니다.