이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.4_조(배트맨 토토,배트맨 토토)버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

9.2. 쿼리 언어(SQL) 기능

SQL 함수는 임의의 SQL 문 목록을 실행합니다. 목록의 마지막 쿼리 결과를 반환합니다. 에선택. 단순(설정되지 않은) 경우에는 마지막 쿼리 결과의 첫 번째 행이 반환됩니다. (곰 그 점을 명심하세요"첫 번째 행"의 다음을 사용하지 않으면 여러 행 결과가 잘 정의되지 않습니다.주문 기준.) 마지막 쿼리에서 no를 반환하는 경우 행이 전혀 없으면 NULL이 반환됩니다.

또는 SQL 함수는 다음을 지정하여 집합을 반환하도록 선언할 수 있습니다. 함수의 반환 유형은 다음과 같습니다.SETOF 어떤 유형. 이 경우 모든 행 마지막 쿼리 결과가 반환됩니다. 자세한 내용이 나타납니다 아래.

SQL 함수의 본문은 하나 이상의 목록이어야 합니다. 세미콜론으로 구분된 SQL 문입니다. 왜냐하면 의 구문토토 사이트 추천 생성명령 토토 사이트 추천 본문을 단일로 묶어야 합니다. 따옴표, 작은따옴표(')에서 사용됨 토토 사이트 추천의 본문은 두 개의 싱글을 작성하여 이스케이프되어야 합니다. 따옴표('') 또는 백슬래시(\') 여기서 각 인용문이 필요합니다.

SQL 함수에 대한 인수는 다음에서 참조될 수 있습니다. 구문을 사용하는 함수 본문$n: $1은 첫 번째 인수인 $2를 나타냅니다. 두 번째 등등. 인수가 복합 유형인 경우 그런 다음"점 표기법", 예:$1.emp, 속성에 액세스하는 데 사용될 수 있음 논쟁의.

9.2.1. 예

간단한 SQL 함수를 설명하려면 다음을 고려하십시오. 은행 계좌에서 인출하는 데 사용될 수 있습니다.

CREATE FUNCTION tp1 (정수, 숫자) RETURNS 정수 AS '
    업데이트 뱅크 
        SET 잔액 = 잔액 - $2
        어디에 accountno = $1;
    1을 선택하세요.
' 언어 SQL;

사용자는 이 기능을 실행하여 계좌 17에서 인출할 수 있습니다. 다음과 같이 $100.00:

tp1(17, 100.0) 선택;

실제로는 더 유용한 결과를 원할 것입니다. 상수보다 토토 사이트 추천에서"1", 따라서 더 그럴듯한 정의는

CREATE FUNCTION tp1 (정수, 숫자) 숫자 AS '를 반환합니다.
    업데이트 뱅크 
        SET 잔액 = 잔액 - $2
        어디에 accountno = $1;
    계좌 번호 = $1인 은행에서 잔액을 선택하세요.
' 언어 SQL;

잔액을 조정하고 새 잔액을 반환합니다.

다음 명령 모음SQL언어는 함께 패키지될 수 있으며 토토 사이트 추천로 정의됩니다. 명령에는 데이터가 포함될 수 있습니다. 수정(예:삽입, 업데이트삭제) 글쎄요선택쿼리. 그러나 최종 명령은 다음과 같아야 합니다.선택그것 함수의 반환 유형으로 지정된 모든 것을 반환합니다. 또는 다음과 같은 SQL 함수를 정의하려는 경우 작업을 수행하지만 반환할 유용한 값이 없는 경우 다음을 수행할 수 있습니다. 돌아오는 것으로 정의하세요.공허. 그런 경우에는 a로 끝나서는 안 됩니다.선택. 에 대한 예:

CREATE FUNCTION clean_EMP () 반환 void AS '
    EMP에서 삭제 
        EMP.salary <= 0;
' 언어 SQL;

clean_EMP()를 선택하세요;
clean_emp
-----------

(1행)

9.2.2. SQL베이스의 기능 유형

가능한 가장 간단한SQL토토 사이트 추천에는 인수가 없으며 단순히 기본 유형을 반환합니다. 와 같이정수:

CREATE FUNCTION one()은 정수 AS '를 반환합니다.
    결과로 1을 선택하십시오.
' 언어 SQL;

하나를 선택하세요();
하나
-----
   1

토토 사이트 추천 내에서 열 별칭을 정의했음을 확인하세요. 토토 사이트 추천 결과의 본문(이름 포함)결과), 하지만 이 열 별칭은 표시되지 않습니다. 함수 외부. 따라서 결과에는 라벨이 지정됩니다.하나대신결과.

정의하기가 거의 쉽습니다SQL기본 유형을 다음과 같이 취하는 함수 인수. 아래 예에서 우리가 어떻게 참조하는지 주목하세요. 함수 내의 인수는 다음과 같습니다.$1그리고$2:

CREATE FUNCTION add_em(정수, 정수) RETURNS 정수 AS '
    $1 + $2를 선택하세요.
' 언어 SQL;

SELECT add_em(1, 2) AS 답변;
답변
--------
      3

9.2.3. SQL복합체의 기능 유형

복합 유형의 인수로 토토 사이트 추천를 지정할 때, 우리는 우리가 원하는 인수를 지정해야 할 뿐만 아니라 (우리가 그랬던 것처럼) 위와 같이$1그리고$2) 뿐만 아니라 해당 인수의 속성도 포함됩니다. 예를 들어 다음과 같이 가정해 보겠습니다.EMP테이블입니다 직원 데이터를 포함하므로 직원의 이름도 포함됩니다. 테이블의 각 행의 복합 유형입니다. 다음은 함수입니다.double_salary무엇을 계산하는지 당신의 급여가 두 배가 된다면:

CREATE FUNCTION double_salary(EMP) 정수 AS '를 반환합니다.
    SELECT $1.급여 * 2 AS 급여;
' 언어 SQL;

SELECT 이름, double_salary(EMP) AS dream
    EMP에서
    WHERE EMP.cubicle ~= 포인트 '(2,1)';
이름 | 꿈
------+---------
 샘 |  2400

구문 사용에 유의하세요$1.급여인수의 필드 하나를 선택하려면 행 값. 또한 호출 방법에 주목하세요.선택명령은 테이블 이름을 사용하여 해당 테이블의 전체 현재 행을 복합 값으로 표시합니다.

다음을 반환하는 함수를 만드는 것도 가능합니다 복합형. 다음은 다음을 반환하는 함수의 예입니다. 싱글EMP행:

토토 사이트 추천 생성 new_emp()는 EMP를 '로 반환합니다.
    SELECT 텍스트 ''없음'' AS 이름,
        AS연봉 1000,
        25 AS나이,
        포인트 ''(2,2)'' AS 칸막이;
' 언어 SQL;

이 경우 우리는 각 속성을 상수 값이지만 모든 계산이나 표현식은 이 상수로 대체되었습니다. 중요한 두 가지 사항을 참고하세요. 토토 사이트 추천 정의에 대해:

  • 대상 목록 순서는 그것과 정확히 동일해야 합니다 다음과 연관된 테이블에 열이 표시됩니다. 복합형. (위에서 했던 것처럼 열 이름을 지정하면 시스템과 관련이 없습니다.)

  • 다음과 일치하도록 표현식을 유형 변환해야 합니다. 복합 유형을 정의하지 않으면 오류가 발생합니다 이렇게:

    오류: emp를 반환하도록 선언된 함수가 열 1의 텍스트 대신 varchar를 반환합니다.
    

행(복합 유형)을 반환하는 함수를 사용할 수 있습니다. 아래에 설명된 대로 테이블 토토 사이트 추천로 사용됩니다. 라고 불리기도 합니다 SQL 표현식의 컨텍스트에서(단, 추출할 때만) 행에서 단일 속성을 삭제하거나 전체 행을 동일한 복합 유형을 허용하는 또 다른 함수입니다. 에 대한 예

SELECT (new_emp()).이름;
이름
------
 없음

파서를 방지하려면 추가 괄호가 필요합니다. 혼란스러워지고 있어요:

SELECT new_emp().name;
오류: 파서: "." 근처에서 구문 분석 오류가 발생했습니다.

또 다른 옵션은 추출을 위해 함수 표기법을 사용하는 것입니다 속성. 이것을 설명하는 간단한 방법은 다음과 같습니다. 표기법속성(테이블)그리고테이블.속성교환 가능:

SELECT 이름(new_emp());
이름
------
 없음
--
-- 이는 다음과 같습니다.
-- EMP.name AS youngster FROM EMP WHERE EMP.age < 30을 선택하세요.
--
SELECT 이름(EMP) AS 어린아이
    EMP에서
    WHERE 연령(EMP) < 30;
젊은이
-----------
 샘

행 결과를 반환하는 함수를 사용하는 또 다른 방법은 다음과 같습니다. 행 유형 매개변수를 허용하는 두 번째 함수를 선언하고 함수 결과를 전달합니다.

CREATE FUNCTION getname(emp) 텍스트를 AS로 반환합니다.
'$1.이름 선택;'
언어 SQL;
SELECT getname(new_emp());
 getname
---------
 없음
(1행)

9.2.4. SQL테이블 토토 사이트 추천

테이블 토토 사이트 추천는 다음에 사용될 수 있는 함수입니다.발신쿼리의 절입니다. 모든 SQL 언어 함수는 이런 방식으로 사용될 수 있지만 특히 복합 유형을 반환하는 함수에 유용합니다. 기능의 경우 기본 유형을 반환하도록 정의된 경우 테이블 토토 사이트 추천는 1열 테이블. 함수가 다음을 반환하도록 정의된 경우 복합 유형의 경우 테이블 토토 사이트 추천는 각 유형에 대한 열을 생성합니다. 복합 유형의 열입니다.

다음은 예입니다:

CREATE TABLE foo(foid int, foosubid int, fooname 텍스트);
INSERT INTO foo VALUES(1,1,'조');
INSERT INTO foo VALUES(1,2,'Ed');
INSERT INTO foo VALUES(2,1,'Mary');

토토 사이트 추천 생성 getfoo(int)는 foo를 '로 반환합니다.
    SELECT * FROM foo WHERE fooid = $1;
' 언어 SQL;

SELECT *, upper(fooname) FROM getfoo(1) AS t1;
푸이드 | 후수비드 | 이름 | 상부
--------+----------+---------+-------
     1 |        1 | 조 | 조
(2행)

예제에서 볼 수 있듯이, 우리는 함수의 결과는 마치 함수의 열인 것처럼 동일합니다. 일반 테이블.

함수에서 단 하나의 행만 얻었음을 참고하세요. 이것은 우리가 말하지 않았기 때문에SETOF.

9.2.5. SQL토토 사이트 추천 반환 세트

SQL 함수가 반환으로 선언된 경우SETOF 어떤 종류, 토토 사이트 추천의 마지막선택쿼리는 다음과 같습니다 실행이 완료되고 출력되는 각 행은 다음과 같이 반환됩니다. 집합의 요소입니다.

이 기능은 일반적으로 함수를 다음과 같이 호출하여 사용됩니다. 테이블 기능. 이 경우 함수에서 반환된 각 행 쿼리에서 본 테이블의 행이 됩니다. 예를 들어, 그 테이블을 가정foo동일함 위와 같은 내용을 담고 있으며 다음과 같이 말합니다.

CREATE FUNCTION getfoo(int) setof foo AS '를 반환합니다.
    SELECT * FROM foo WHERE fooid = $1;
' 언어 SQL;

SELECT * FROM getfoo(1) AS t1;
푸이드 | 후수비드 | fooname
--------+------------+---------
     1 |        1 | 조
     1 |        2 | 에드
(2행)

현재 집합을 반환하는 함수는 다음에서도 호출될 수 있습니다. a의 대상 목록선택질의. 에 대한 각 행은선택생성자 자체적으로 집합을 반환하는 함수가 호출되고 출력이 함수 결과 집합의 각 요소에 대해 행이 생성됩니다. 하지만 이 기능은 더 이상 사용되지 않으며 더 이상 사용되지 않을 수 있습니다. 향후 릴리스에서는 제거됩니다. 다음은 예시입니다 대상 목록에서 세트를 반환하는 함수:

CREATE FUNCTION listchildren(text) SETOF 텍스트를 AS로 반환합니다.
'WHERE 상위 = $1인 노드에서 이름 선택'
언어 SQL;
SELECT * FROM 노드;
   이름 | 부모
---------+---------
 탑 |
 어린이1 | 탑
 차일드2 | 탑
 어린이3 | 탑
 하위 하위1 | 어린이1
 하위 하위2 | 어린이1
(6열)

SELECT listchildren('상위');
 목록어린이
--------------
 어린이1
 어린이2
 어린이3
(3열)

SELECT 이름, listchildren(이름) FROM 노드;
  이름 | 목록어린이
------+---------------
 탑 | 어린이1
 탑 | 어린이2
 탑 | 어린이3
 어린이1 | 하위 하위1
 어린이1 | 하위 하위2
(5행)

마지막에선택, 아니요 다음에 대한 출력 행이 나타납니다.아이2, 아이3등. 이런 일이 발생하는 이유는목록어린이빈 세트를 반환합니다. 해당 입력에 대해서는 출력 행이 생성되지 않습니다.