결과적으로 새로운 유형을 정의하는 것의 일부는 정의입니다. 행동을 설명하는 배트맨 토토. 결과적으로 새 유형을 정의하지 않고 새 배트맨 토토을 정의 할 수 있습니다. 반대는 사실이 아닙니다. 따라서 우리는 새로운 추가 방법을 설명합니다 배트맨 토토Postgres전 새로운 유형을 추가하는 방법 설명.
Postgres SQL세 가지 유형의 배트맨 토토 제공 :
쿼리 언어 함수 (SQL)
절차 적 언어 함수 (for 예, pltcl 또는 plsql)
프로그래밍 언어 함수 (a 와 같은 편집 된 프로그래밍 언어C)
SQL 함수 SQL 쿼리 목록을 실행합니다. 목록에서 마지막 쿼리 결과를 반환합니다. SQL 일반적으로 반환 세트의 함수. 그들의 returnType가 아닌 경우 A로 지정setof마지막 쿼리 결과의 임의 요소는 다음과 같습니다 반품.
다음과 같은 SQL 기능의 본문 쿼리는 세미콜론으로 분리되고 내부에 괄호가 있습니다 단일 쿼트 마크. 쿼리에 사용 된 인용 표시가 있습니다 백 슬래시로 앞에 탈출해야합니다.
SQL 함수에 대한 인수는 $ n 구문을 사용한 쿼리 : $ 1은 첫 번째 인수, $ 2를 나타냅니다. 두 번째로. 인수가 복잡하다면 Adot표기법 (예 : "$ 1.emp")이있을 수 있습니다 인수의 속성에 액세스하거나 호출하는 데 사용됩니다. 배트맨 토토.
간단한 SQL 함수를 설명하려면 다음을 고려하십시오 다음, 은행 계좌를 차가운데 사용될 수 있습니다 :
배트맨 토토 생성 TP1 (int4, float8) int4를 반환합니다 '업데이트 은행 밸런스 설정 = bank.bance- $ 2 여기서 bank.acctountno = $ 1; 선택 1; ' 언어 'sql';사용자는이 기능을 차변 계정으로 실행할 수 있습니다 17 다음과 같이 $ 100.00 :
TP1 (17,100.0); 선택
다음의 더 흥미로운 예는 단일을 취합니다 EMP 타입의 인수 및 여러 결과를 검색합니다.
배트맨 토토을 작성합니다 취미 (EMP)는 취미를 설정합니다 '취미 선택.* 취미에서 여기서 $ 1.name = Hobbies.Person ' 언어 'sql';
가능한 가장 간단한SQL함수는 인수가 없으며 단순히 기본 유형을 반환합니다. 와 같은int4:
함수 생성 one () int4를 반환합니다 '결과로 1을 선택하십시오.' 언어 'SQL'; 답으로 하나를 선택하십시오. +-------+ | 답변 | +-------+ | 1 | +-------+
우리가 함수의 열 이름을 정의했음을 알았습니다. 결과 (이름 결과와 함께)이지만이 열 이름은 아닙니다. 함수 외부에서 볼 수 있습니다. 따라서 결과는 레이블이 지정됩니다 하나 대신 대답합니다.
거의 정의하기 쉽습니다SQL기본 유형을 사용하는 기능 논쟁. 아래의 예에서, 우리가 어떻게 참조하는지 주목하십시오. $ 1 및 $ 2 : 배트맨 토토 내의 논쟁
함수 생성 add_em (int4, int4) int4를 반환합니다 '$ 1 + $ 2를 선택하십시오'; 언어 'SQL'; 답변으로 add_em (1, 2)을 선택하십시오. +-------+ | 답변 | +-------+ | 3 | +-------+
복합 인수와 함께 함수를 지정할 때 유형 (예 : EMP), 우리는 어떤 인수를 지정해야 할뿐만 아니라 우리는 (우리가 위에서 $ 1과 $ 2로했던 것처럼) 그 주장의 속성. 예를 들어 배트맨 토토을 사용하십시오 당신의 월급이 될 것인지를 계산하는 double_salary 두 배가되었습니다 :
함수 만들기 Double_salary (EMP) int4를 반환합니다 'SELECT $ 1. SALARY * 2는 급여로;' 언어 'SQL'; 꿈으로 이름, Double_salary (EMP)를 선택하십시오 emp에서 여기서 emp.cubicle ~ = point '(2,1)'; +-----+-------+ | 이름 | 꿈 | +-----+-------+ | 샘 | 2400 | +-----+-------+
구문 $ 1. Salary의 사용에 주목하십시오. 출시하기 전에 복합 유형을 반환하는 배트맨 토토 주제로 먼저 투사를위한 함수 표기법을 소개해야합니다 속성. 이것을 설명하는 간단한 방법은 일반적으로 표기법 속성 (표)을 사용합니다 표.
- - 이것은 다음과 같습니다. - Emp.age <30에서 Emp.name의 이름으로 Emp.Name을 선택하십시오. - 젊은이로 이름 (EMP)을 선택하십시오 emp에서 Age (Emp) <30; +----------+ | 젊은이 | +----------+ | 샘 | +----------+
우리가 볼 수 있듯이, 이것이 항상 그런 것은 아닙니다. 이 배트맨 토토 표기법은 우리가 사용하려면 중요합니다. 단일 행을 반환하는 함수. 우리는 조립함으로써 이것을합니다 함수 내의 전체 행, 속성 별 속성. 이것은 단일 EMP를 반환하는 함수의 예입니다. 열:
배트맨 토토 작성 new_emp () emp를 반환합니다 이름으로 '텍스트'를 선택하십시오. 급여로 1000, 25 나이로 포인트 ''(2,2) ''칸막이 '' 언어 'sql';
이 경우 각 속성을 지정했습니다. 일정한 값이지만 계산 또는 표현이 가능합니다 이러한 상수로 대체되었습니다. 정의 a 이와 같은 기능은 까다로울 수 있습니다. 더 중요한 것 중 일부 경고는 다음과 같습니다.
대상 목록 순서는 정확히 동일해야합니다. 속성이 생성 테이블에 나타납니다 복합 유형을 정의한 진술
당신은 표현을 일치시키기위한 표현을 형성해야합니다 복합 유형의 정의 또는 같은 오류가 발생합니다 이것:
오류 : EMP를 반환하라고 선언 한 함수 1 열에서 텍스트 대신 varchar를 반환합니다.
행을 반환하는 함수를 호출 할 때 우리는 할 수 없습니다. 전체 행을 검색하십시오. 우리는 an을 투사해야합니다 행 밖으로 속성 또는 전체 행을 다른 배트맨 토토.
NOLY로 이름 (new_emp ())을 선택하십시오. +-------+ | 아무도 | +-------+ | 없음 | +-------+
일반적으로 배트맨 토토을 사용해야하는 이유 배트맨 토토 속성 돌출을위한 구문 값은 파서가 이해하지 못한다는 것입니다 결합 된 경우 투영을위한 기타 (DOT) 구문 함수 호출.
new_emp ()를 선택하십시오. 통지 : 파서 : "또는 그 근처의 구문 오류."
SQL쿼리 언어를 함께 포장 할 수 있습니다 함수로 정의됩니다. 명령에는 업데이트가 포함될 수 있습니다 (즉.,삽입, 업데이트및삭제) AS 뿐만 아니라select쿼리. 그러나, 최종 명령은 여야합니다.select함수로 지정된 모든 것을 반환합니다 return -type.
함수 만들기 clean_emp () int4를 반환합니다 'Emp에서 삭제 여기서 emp.salary <= 0; incor_this로 1을 선택하십시오. ' 언어 'SQL'; clean_emp ()를 선택하십시오. +-+ | x | +-+ | 1 | +-+