SQL UDF 제한 사항

이 항목에서는 SQL로 작성된 처리기에 대한 제한 사항에 대해 설명합니다.

인자 및 반환 유형 제약 조건이 때때로 무시됨

인자 또는 반환 값에 대해 선언된 특정 유형의 특성은 UDF 호출 시 무시됩니다. 이러한 경우 수신된 값은 선언에 지정된 제약 조건을 준수하는지 여부에 관계없이 수신된 값으로 사용될 수 있습니다.

다음은 논리가 SQL로 작성된 UDF에 대해 무시됩니다.

  • NUMBER 유형의 인자 및 반환 값에 대한 전체 자릿수 및 소수 자릿수

  • VARCHAR 유형의 인자 및 반환 값의 길이

다음 예제의 코드는 arg1 인자와 반환 값이 1자 이하의 VARCHAR이어야 한다고 선언합니다. 하지만 값이 1자보다 긴 arg1 로 이 함수를 호출하면 제약 조건이 지정되지 않은 것처럼 성공합니다.

CREATE OR REPLACE FUNCTION tf (arg1 VARCHAR(1))
RETURNS VARCHAR(1)
LANGUAGE SQL AS 'SHA2(a)';
Copy

데이터베이스 오브젝트를 참조할 때 동적 SQL은 지원되지 않습니다.

동적 SQL을 사용하여 데이터베이스 오브젝트를 참조하면 다음과 같은 텍스트를 포함하는 오류가 생성됩니다.

Compilation of SQL UDF failed: SQL compilation error: syntax error... unexpected '<variable_name>'

서로 다른 데이터베이스 오브젝트를 사용하는 동적 SQL 문을 생성해야 하는 경우 대신 저장 프로시저를 작성해 보십시오. 다음 언어 중 하나로 저장 프로시저를 작성할 수 있습니다.

다음 예제의 코드는 IDENTIFIER 함수를 사용하여 이름이 table_name_parameter 변수로 동적으로 지정되는 테이블을 참조하기 때문에 실패하게 됩니다.

CREATE OR REPLACE FUNCTION profit2(table_name_parameter VARCHAR)
  RETURNS NUMERIC(11, 2)
  AS
  $$
    SELECT SUM((retail_price - wholesale_price) * number_sold)
        FROM IDENTIFIER(table_name_parameter)
  $$
  ;
Copy