SQL 기능 임의의 SQL 문을 실행합니다. 목록의 마지막 쿼리 결과를 반환합니다. 에이select. 간단한 (비 세트) 사례에서 마지막 쿼리 결과의 첫 번째 행이 반환됩니다. (곰 그것을 염두에두고"첫 번째 행"의 a 멀티 로우 결과는 사용하지 않는 한 잘 정의되지 않습니다주문.) 마지막 쿼리가 반환되는 경우 줄이 전혀 줄어 듭니다. Null이 반환됩니다.
또는 SQL 함수는 함수의 리턴 유형 assetof 약간. 이 경우 모든 행 마지막 쿼리의 결과가 반환됩니다. 자세한 내용이 나타납니다 아래에.
SQL 함수의 본문은 하나 이상의 목록이어야합니다. 세미콜론으로 분리 된 SQL 문. 이에 유의하십시오 의 구문토토 사이트 추천 만들기명령 토토 사이트 추천의 본문은 단일로 둘러싸여 있어야합니다. 따옴표, 단일 견적 마크 (') 사용 기능의 본문은 두 개의 싱글을 작성하여 탈출해야합니다. 인용문 ('') 또는 백 슬래시 (\ ') 각 견적이 원하는 곳.
SQL 함수에 대한 인수는 구문을 사용하는 기능 본문$n: $ 1은 첫 번째 인수 $ 2를 나타냅니다 두 번째로. 인수가 복합 유형 인 경우 그런 다음"DOT 표기법", 예 :$ 1.EMP, 속성에 액세스하는 데 사용될 수 있습니다 논쟁의.
간단한 SQL 기능을 설명하려면 다음을 고려하십시오. 은행 계좌를 차출하는 데 사용될 수 있습니다.
함수 생성 TP1 (정수, 숫자) 정수를 반환합니다. 은행 업데이트 밸런스 설정 = 균형 - $ 2 여기서 AccountNo = $ 1; 선택 1; '언어 SQL;
사용자는이 기능을 차변 계정으로 실행할 수 있습니다 17 다음과 같이 $ 100.00 :
TP1 (17, 100.0); 선택
실제로는 더 유용한 결과를 원할 것입니다. 일정한 기능보다 토토 사이트 추천에서"1", 더 가능성이 높은 정의는입니다.
함수 생성 tp1 (정수, 숫자) 숫자를 숫자로 반환합니다. 은행 업데이트 밸런스 설정 = 균형 - $ 2 여기서 AccountNo = $ 1; AccountNo = $ 1 인 은행에서 잔액을 선택하십시오. '언어 SQL;
균형을 조정하고 새로운 밸런스를 반환합니다.
SQL언어를 함께 포장 할 수 있습니다 토토 사이트 추천로 정의됩니다. 명령에는 데이터가 포함될 수 있습니다 수정 (예 :삽입, 업데이트및삭제) AS 뿐만 아니라select쿼리. 그러나, 최종 명령은 여야합니다.select함수의 리턴 유형으로 지정된 내용을 반환합니다. 또는 SQL 함수를 정의하려면 작업을 수행하지만 반환 할 유용한 가치가 없습니다. 반환으로 정의void. 이 경우 로 끝나지 않아야합니다.select. 을 위한 예:
토토 사이트 추천 만들기 clean_emp () voids as ' emp에서 삭제하십시오 여기서 emp.salary <= 0; '언어 SQL; clean_emp (); 선택
clean_emp ---------- (1 행)
가장 간단한 가능한SQL토토 사이트 추천는 인수가 없으며 단순히 기본 유형을 반환합니다. 처럼정수:
함수 생성 one ()은 정수를 반환합니다. 결과적으로 1을 선택하십시오. '언어 SQL; 하나 (); 선택
하나 ----- 1
토토 사이트 추천 내에서 열 별칭을 정의했음을 알 수 있습니다. 토토 사이트 추천 결과에 대한 본문 (이름 포함결과) 그러나이 열 별칭은 보이지 않습니다 기능 밖. 따라서 결과는 레이블이 지정됩니다ONE대신결과.
거의 정의하기 쉽습니다SQL기본 유형을 사용하는 기능 논쟁. 아래의 예에서, 우리가 어떻게 참조하는지 주목하십시오. 기능 내의 인수$ 1and$ 2:
함수 생성 add_em (정수, 정수)은 정수를 반환합니다. $ 1 + $ 2를 선택하십시오. '언어 SQL; add_em (1, 2)을 답으로 선택하십시오;
답변 -------- 3
복합 유형의 인수와 함께 토토 사이트 추천를 지정할 때
우리는 우리가 원하는 주장을 지정해야 할뿐만 아니라
위의$ 1and$ 2)뿐만 아니라 그 주장의 속성.
예를 들어,emp는 테이블입니다
직원 데이터를 포함하므로
테이블의 각 행의 복합 유형. 다음은 함수입니다double_salary
그것은 무엇을 계산합니다
당신의 급여는 두 배가된다면 :
토토 사이트 추천 만들기 Double_salary (EMP)는 정수를 반환합니다. $ 1. Salary * 2를 급여로 선택하십시오. '언어 SQL; 꿈으로 이름, Double_salary (EMP)를 선택하십시오 emp에서 여기서 emp.cubicle ~ = point '(2,1)';
이름 | 꿈 ------+------- 샘 | 2400
구문의 사용에 주목하십시오$ 1. Salary인수의 한 분야를 선택하려면 행 값. 또한 부름이 어떻게select명령은 테이블 이름을 사용하여 복합 값으로 해당 테이블의 전체 현재 행.
반환하는 토토 사이트 추천를 빌드 할 수도 있습니다. 복합 유형. 이것은 반환하는 토토 사이트 추천의 예입니다. 하나의emp행 :
토토 사이트 추천 만들기 new_emp ()은 emp를 반환합니다. 이름으로 텍스트 ''없음 '을 선택하고 급여로 1000, 25 나이로 칸막이로서 포인트 ''(2,2) ''; '언어 SQL;
이 경우 각 속성을 일정한 가치이지만 계산이나 표현은 가질 수 있습니다 이 상수로 대체되었습니다. 두 가지 중요한 사항에 주목하십시오 기능 정의에 대해 :
대상 목록 순서는 정확히 동일해야합니다. 열이 다음과 관련된 테이블에 나타납니다. 복합 유형. (위에서했던 것처럼 열의 이름 지정, 시스템과 관련이 없습니다.)
당신은 표현을 일치시키기위한 표현을 형성해야합니다 복합 유형의 정의 또는 오류가 발생합니다. 이와 같이:
오류 : EMP를 반환하라고 선언 한 함수 1 열에서 텍스트 대신 varchar를 반환합니다.
행을 반환하는 함수 (복합 유형)를 사용할 수 있습니다. 아래에 설명 된대로 테이블 함수로서. 또한 호출 할 수 있습니다 SQL 표현식의 맥락에서, 그러나 추출 할 때만 행에서 단일 속성 또는 전체 행을 동일한 복합 유형을 받아들이는 다른 함수. 을 위한 예,
select (new_emp ()). 이름;
이름 ------ 없음
우리는 파서를 유지하려면 여분의 괄호가 필요합니다. 혼란스러워 :
new_emp (). 이름을 선택하십시오. 오류 : Parser : "또는 근처의 구문 분석 오류". "
또 다른 옵션은 추출을 위해 기능 표기법을 사용하는 것입니다 속성. 이것을 설명하는 간단한 방법은 우리가 사용할 수 있다는 것입니다. 표기법속성 (표)andtable.attribute상호 교환 적으로 :
select name (new_emp ());
이름 ------ 없음
- - 이것은 다음과 같습니다. - Emp.age <30에서 Emp.name의 이름으로 Emp.Name을 선택하십시오. - 젊은이로 이름 (EMP)을 선택하십시오 emp에서 Age (Emp) <30;
젊은이 ---------- 샘
행을 사용하는 다른 방법은 행 결과를 반환합니다. 행 유형 매개 변수를 수락하는 두 번째 함수 선언 및 기능 결과를 전달합니다.
function getName (EMP) 작성 텍스트를 반환합니다 '선택 $ 1. 이름;' 언어 SQL;
getName (new_emp ())를 선택합니다. getName ------- 없음 (1 행)
테이블 토토 사이트 추천는에서 사용될 수있는 것입니다.From쿼리 조항. 모든 SQL 언어 기능은 이러한 방식으로 사용될 수 있지만 특히 복합 유형을 반환하는 기능에 유용합니다. 함수 인 경우 기본 유형을 반환하도록 정의되며 테이블 함수는 1 열 테이블. 함수가 반환하도록 정의 된 경우 복합 유형, 테이블 함수는 각각의 열을 생성합니다. 복합 유형의 열.
예는 다음과 같습니다.
테이블 foo (FOOD INT, FOOSUBID int, fooname 텍스트) 만들기; foo 값에 삽입 (1,1, 'Joe'); INSERT INTO foo VALUES(1,2,'Ed'); foo 값에 삽입 (2,1, 'Mary'); 기능 생성 getfoo (int)는 foo를 '로 반환합니다. FOO에서 * FOO FOOOD = $ 1; '언어 SQL; getfoo (1)에서 *, 상단 (fooname)을 선택하여 t1;
폼 | foosubid | Fooname | 높은 -------+----------+---------+------- 1 | 1 | 조 | 조 (2 줄)
예에서 알 수 있듯이, 우리는 기능의 결과는 마치 일반 테이블.
우리는 토토 사이트 추천에서 하나의 행만 얻었습니다. 이것은 우리가 말하지 않았기 때문에setof.
SQL 함수가 반환으로 선언 된 경우setof Somegeype, 토토 사이트 추천의 최종select쿼리입니다 완료로 실행되고 각 행 출력이 다음과 같이 반환됩니다. 세트의 요소.
이 기능은 일반적으로 함수를 테이블 기능. 이 경우 각 행은 함수에 의해 반환됩니다 쿼리에서 볼 수있는 테이블 행이됩니다. 예를 들어, 그 표를 가정foo동일합니다 위의 내용, 그리고 우리는 다음과 같이 말합니다.
함수 생성 getfoo (int) foo sets sets foo as ' FOO에서 * FOO FOOOD = $ 1; '언어 SQL; getfoo (1)에서 *를 선택하여 t1;
폼 | foosubid | Fooname -------+----------+------- 1 | 1 | 조 1 | 2 | 에드 (2 줄)
현재, 반환 세트도 호출 할 수 있습니다 A의 대상 목록select쿼리. 을 위한 각 행이select생성 그 자체로, 기능 반환 세트가 호출되고 출력이 함수 결과 세트의 각 요소에 대해 행이 생성됩니다. 그러나이 기능은 더 이상 사용되지 않으며 향후 릴리스에서 제거되었습니다. 다음은 예입니다 기능 대상 목록에서 세트를 반환하는 기능 :
함수 생성 ListChildren (텍스트) 텍스트를 텍스트로 반환합니다 '부모 = $ 1'인 노드에서 이름을 선택하십시오. ' 언어 SQL;
노드에서 선택 *; 이름 | 조상 ----------+-------- 상단 | child1 | 맨 위 child2 | 맨 위 child3 | 맨 위 하위 하일드 1 | child1 subchild2 | child1 (6 줄) ListChildren ( 'top')을 선택하십시오. 목록 -------------- child1 child2 child3 (3 줄) 노드에서 이름, ListChildren (이름)을 선택하십시오. 이름 | 목록 --------+------------- 상단 | child1 상단 | child2 상단 | child3 child1 | 하위 하드 1 child1 | subchild2 (5 줄)
마지막select, 아니요
출력 행이 나타납니다Child2,
Child3등. 이것은이기 때문에 발생합니다.ListChildren
빈 세트를 반환합니다
이러한 입력의 경우 출력 행이 생성되지 않습니다.