이 섹션과 다음 섹션에서는 모든 것을 설명합니다. 명시 적으로 이해되는 진술 유형pl/pgsql. 하나로 인식되지 않은 것 이 명령문 유형은 SQL 쿼리로 추정되며 전송됩니다. 실행할 기본 데이터베이스 엔진에 (대체 후 어느pl/pgsql사용 된 변수 진술). 예를 들어, SQL삽입, 업데이트및삭제명령은로 간주 될 수 있습니다 진술pl/pgsql. 그러나 그들은 여기에 구체적으로 나열되어 있지 않습니다.
변수 또는 행/레코드 필드에 값을 할당 다음과 같이 작성되었습니다 :
식별자: =표현;
위에서 설명한 바와 같이, 그러한 진술의 표현은 다음과 같습니다. SQL을 통해 평가tỷ lệ kèo bóng đá 88기본 데이터베이스 엔진으로 전송 된 명령. 표현은해야합니다 단일 값을 산출하십시오.
표현식의 결과 데이터 유형이 일치하지 않는 경우 변수의 데이터 유형이거나 변수는 특정입니다 크기/정밀도 (예 :char (20)), 결과 값은에 의해 암시 적으로 변환됩니다.pl/pgsql결과를 사용한 통역사 유형의 출력 기능 및 변수 유형의 입력 기능. 이로 인해 런타임 오류가 발생할 수 있습니다 문자열 형태의 입력 함수에 의해 생성 된 결과 값은 입력 기능에 허용되지 않습니다.
예 :
user_id : = 20; 세금 : = 하위 토탈 * 0.06;
여러 열을 산출하는 선택 명령의 결과 (그러나 한 행만) 레코드 변수에 할당 할 수 있습니다. 행 형 변수 또는 스칼라 변수 목록. 이것은 완료되었습니다 에 의해:
선택대상 표현From ...;
여기서대상레코드가 될 수 있습니다 변수, 행 변수 또는 쉼표로 구분 된 간단한 목록 변수 및 레코드/행 필드. 이것은 꽤 있습니다 와 다릅니다PostgreSQL's 선택의 정상적인 해석, 즉 대상은 새로 생성 된 테이블입니다. (테이블을 만들려면 a 내부의 선택 결과에서pl/pgsql함수, 구문 사용테이블 작성 ... 선택.)
행 또는 변수 목록이 대상으로 사용되는 경우 선택한 값은 대상의 구조와 정확히 일치해야합니다. 런타임 오류가 발생합니다. 레코드 변수가 대상 인 경우 쿼리의 행 유형에 자동으로 구성됩니다. 결과 열.
into 절을 제외하고, tỷ lệ kèo bóng đá 88 문은 동일합니다. 정상적인 SQL 선택 쿼리로 선택하다.
선택 쿼리가 0 행을 반환하면 Null 값은 대상에 할당됩니다. 선택 쿼리가 다중 반환되는 경우 행, 첫 번째 행은 대상과 나머지 행에 할당됩니다. 폐기됩니다. ("첫 번째 열"주문을 사용하지 않으면 잘 정의되지 않았습니다 에 의해.)
현재로서는 안에있는 절은 거의 어디서나 나타날 수 있습니다. 선택 쿼리이지만 즉시 배치하는 것이 좋습니다. 위에서 설명한 선택 키워드 후. 미래 버전의pl/pgsql덜 용서할 수 있습니다 절편의 배치에 대해.
사용할 수 있습니다발견직후 과제가 성공 (즉, 적어도 하나의 행이 tỷ lệ kèo bóng đá 88 문). 예를 들어:
empname = myName; 찾을 수없는 경우 ``Employee % found '', myName 예외를 높이십시오. 끝 If;
또는를 사용할 수 있습니다is 널(또는isnull) 조건부 레코드/행 결과가 NULL인지 테스트하십시오. 거기에 주목하십시오 추가 행이 있었는지 알 수있는 방법이 없습니다. 폐기.
선언 user_rec 레코드; full_name varchar; 시작하다 user_id = 3 인 사용자에서 user_rec *로 선택하십시오. users_rec.homepage가 null이면 - 사용자는 홈페이지를 입력하지 않고 "http : //"를 반환합니다. ``http : // ''; 끝 IF; 끝;
때로는 표현식이나 쿼리를 평가하고 싶지만 결과를 버립니다 (일반적으로 함수를 호출하기 때문에 유용한 부작용은 있지만 유용한 결과 값은 없습니다). 할 일 이건pl/pgsql, 사용 성명서 :
공연쿼리;
이것은 a를 실행합니다.tỷ lệ kèo bóng đá 88 쿼리결과를 폐기합니다.pl/pgsql변수는입니다 평소와 같이 쿼리에서 대체되었습니다. 또한 특수 변수발견16509_16603
참고 :하나는 선택하지 않은 것을 기대할 수 있습니다 절은이 결과를 달성하지만 현재는이 결과를 달성 할 것입니다 수행 할 수있는 방법 만 수행됩니다.
예 :
create_mv ( ''cs_session_page_requests_mv ', my_query); 수행
종종 내부에서 동적 쿼리를 생성하려고합니다 당신의pl/pgsql기능, 그 기능 다른 테이블이나 다른 쿼리입니다 데이터 유형이 실행 될 때마다.pl/pgsql의 정상적인 계획을 캐시하려는 시도 이러한 시나리오에서는 쿼리가 작동하지 않습니다. 이것을 처리합니다 일종의 문제, 실행 진술이 제공됩니다.
executeQuery-String;
여기서Query-Stringis 문자열을 산출하는 표현 (유형텍스트) 포함쿼리실행됩니다. 이 문자열은 공급됩니다 말 그대로 SQL 엔진에.
특히 대체가 없음pl/pgsql변수는 쿼리에서 수행됩니다 끈. 변수 값은 쿼리에 삽입되어야합니다. 구축 된 문자열.
동적 쿼리로 작업 할 때는 직면해야합니다. 단일 따옴표의 탈출pl/pgsql. 표를 참조하십시오.섹션 19.11자세한 당신에게 약간의 노력을 절약 할 수있는 설명.
다른 모든 쿼리와 달리pl/pgsql, a쿼리실행 명세서에 의해 실행되는 것은 아닙니다 서버 수명 동안 한 번만 준비하고 저장했습니다. 대신,쿼리준비되었습니다 명세서가 실행될 때마다. 그만큼Query-String동적으로 만들 수 있습니다 가변 테이블에서 작업을 수행하는 절차 내에서 전지.
tỷ lệ kèo bóng đá 88 Queries의 결과는 Execute에 의해 폐기됩니다. 그리고 tỷ lệ kèo bóng đá 88 Into는 현재 Execute 내에서 지원되지 않습니다. 그래서, 동적으로 만들어진 결과를 추출하는 유일한 방법 tỷ lệ kèo bóng đá 88는 나중에 설명 된 execute for-execute 양식을 사용하는 것입니다.
예 :
실행 ''TBL SET 업데이트 '' || QUOTE_INDEN (FieldName) || ''= '' ' || quote_literal (newValue) || '' 어디 ...'';
이 예제는 기능의 사용을 보여줍니다QUOTE_INDEN
(텍스트) 및quote_literal
(텍스트). 필드 및 테이블을 포함하는 변수
식별자를 기능으로 전달해야합니다quote_ident ()
. 리터럴을 포함하는 변수
동적 쿼리 문자열의 요소를 전달해야합니다quote_literal ()
. 둘 다
단일로 동봉 된 입력 텍스트를 반환하기위한 적절한 단계
또는 이중 인용문 및 임베디드 특수 문자가 포함되어 있습니다
제대로 탈출.
동적 쿼리의 훨씬 더 큰 예가 있습니다. 실행하다:
함수 생성 CS_UPDATE_REFERRER_TYPE_PROC () 정수를 반환합니다. 선언하다 참조 _keys 레코드; - a에 사용할 일반 레코드를 선언하십시오. a_output varchar (4000); 시작하다 a_output : = ''기능 생성 CS_FIND_REFERRER_TYPE (Varchar, Varchar, Varchar) varchar를`` '' '로 반환합니다. 선언하다 $ 1의 V_host 별칭; V_Domain 별칭 $ 2; 3 달러에 대한 v_url 별칭; 시작하다 ''; - - 루프 용 쿼리 결과를 스캔하는 방법에 주목하십시오. - for <crecor 구성을 사용합니다. - tỷ lệ kèo bóng đá 88 * in tỷ lệ kèo bóng đá 88 * from cs_referrer_keys writ_order loop의 referrer_keys 용. a_output : = a_output || ''v_ ''|| referrer_keys.kind || '' 좋다 '''''''''' || referrer_keys.key_string || `` '' '' '' '' ''그런 다음‘ '' '' ' || referrer_keys.referrer_type || '' '' '';; 끝 If; ''; 엔드 루프; a_output : = a_output || ``return null; 끝; '' ''언어 '' 'PLPGSQL' '' ';' '; - 변수를 대체하지 않기 때문에 작동합니다. - 그렇지 않으면 실패합니다. 기능을 실행하는 다른 방법으로 수행하십시오 a_output를 실행하십시오. 끝; '언어'plpgsql ';
명령의 효과를 결정하는 몇 가지 방법이 있습니다. 첫 번째 방법은를 사용하는 것입니다.진단, 양식이 있습니다.
진단 받기변수=항목[, ...];
이 명령은 시스템 상태 표시기를 검색 할 수 있습니다.
각항목는 키워드입니다
지정된 상태에 할당 할 상태 값 식별
변수 (수신하기에 적합한 데이터 유형이어야합니다.
그것). 현재 사용 가능한 상태 항목은row_count
,
마지막SQL쿼리가 전송되었습니다
그만큼SQL엔진; 그리고result_oid
, 마지막의 OID
가장 최근에 삽입 된 행SQL쿼리. 참고result_oid
삽입 후에 만 유용합니다
질문.
특수 변수라는 이름의 특수 변수가 있습니다발견OF TYPE부울. 발견각각 내에서 거짓을 시작합니다pl/pgsql함수. 설정되었습니다 다음 각 유형의 진술에 의해 :
명령문 세트에 선택발견행을 반환하는 경우 true, 거짓 행이 반환됩니다.
성명서 세트발견행을 생성하는 경우 (변위) 행이 없으면 거짓이 없으면 행이 없습니다. 생산.
명령문 업데이트, 삽입 및 삭제 세트발견적어도 하나의 행에 영향을 미치는 경우 True 행에 줄에 영향을 미치지 않으면 거짓.
페치 문장 세트발견행을 반환하는 경우 true 행이 반환되지 않으면 false입니다.
A 진술 세트발견true 한 번 이상 반복하면 거짓이됩니다. 이것은 적용됩니다 For Statement의 세 가지 변형에 모두 (정수 루프, 레코드 세트, 루프 및 동적 레코드 세트 루프).발견루프 종료 용 : 루프 실행 내부발견는 for에 의해 수정되지 않았습니다 진술, 실행에 의해 변경 될 수 있지만 루프 바디 내의 다른 진술.
발견는 로컬 변수입니다. 어느 그것에 대한 변경은 현재에만 영향을 미칩니다pl/pgsql기능.