>62_word_end<.26 >60_word_end< | |||
---|---|---|---|
>151_word_end< | 와이즈 토토 : 문서 :<< | >153_word_end<>154_word_end< - PostgreSQL : 문서<<>157_word_end< | >158_word_end< |
>160_word_end<>154_word_end<>162_word_end<>154_word_end<>164_word_end<Postgre>156_word_end<>166_word_end<
>168_word_end<>169_word_end<>170_word_end<>735_word_end< >158_word_end<.
>169_word_end<>176_word_end<;
>169_word_end<>176_word_end<식과 함께 함수를 종료하고 값을 >735_word_end<합니다>176_word_end<>181_word_end<>154_word_end<>183_word_end<
스칼라 유형을 >735_word_end<하는 함수>436_word_end< >176_word_end<식 결과는 할당에 대해 >737_word_end< 된대로 기능의 >735_word_end< 유형으로 자동으로 표시됩니다. 그러나 합성 (행) 값을 >735_word_end<하려면 요청 된 열 세트를 정확히 전달하는 >176_word_end<식을 작성해야합니다. 이것은 명시적인 캐스팅을 >215_word_end<해야 할 수 있습니다.
>185_word_end<>169_word_end<>176_word_end<이없는. 출력 매개 변수의 >69_word_end< 값이 >735_word_end<됩니다.
>188_word_end<>189_word_end<>190_word_end<>169_word_end<명령문은 기능을 조기에 빠뜨리는 데 >215_word_end<될 수 있습니다. 그러나 >158_word_end< >176_word_end<을 작성하지 마십시오>169_word_end<.
>195_word_end<>169_word_end<>197_word_end<>189_word_end<>199_word_end<>169_word_end<>201_word_end<
>202_word_end<
- 스칼라 유형을 >735_word_end<하는 기능 >735_word_end< 1 + 2; >735_word_end< scalar_var; - 복합 유형을 >735_word_end<하는 기능 >169_word_end< composite_type_var; >169_word_end< (1, 2, 'Three':: 텍스트); - 유형을 수정하기 위해 열을 캐스트해야합니다
>158_word_end< >735_word_end<>176_word_end<>210_word_end<>211_word_end<>210_word_end< >261_word_end<Comm>170_word_end<-str>702_word_end[>215_word_end<>176_word_end<[>218_word_end< ]>220_word_end<
>221_word_end<PL/PG>156_word_end<>223_word_end<>224_word_end<>225_word_end<>226_word_end<>735_word_end< >158_word_end<>228_word_end<>169_word_end< query>230_word_end<>169_word_end<인수가없는 명령은 함수가 실행 된 것을 나타내는 데 >215_word_end<됩니다.>158_word_end< >735_word_end<스칼라 및 복합 데이터 유형 모두>436_word_end< >215_word_end<할 수 있습니다. 복합 결과 유형을 >215_word_end<하여 전체>235_word_end<>236_word_end<>169_word_end< query함수의 결과 세트에 >211_word_end<를 실행 한 결과를 추가합니다.>158_word_end< >735_word_end<>170_word_end<>169_word_end< query>242_word_end<
>158_word_end< >735_word_end<>170_word_end<>735_word_end< >211_word_end<실제로 함수>436_word_end< 돌아 오지 마십시오. 단순히 함수의 결과 세트에 0 이상을 추가합니다. 그런 >158_word_end< 실행은의 >158_word_end< >315_word_end<로 >510_word_end<됩니다.>154_word_end<>248_word_end<>735_word_end< >158_word_end<>228_word_end<>169_word_end< query>252_word_end<>169_word_end<, 인수가 없어야하는 것은 제어가 함수를 종료하도록 유발합니다 (>228_word_end< 제어가 함수의 끝에 도달하게 할 수 있습니다)>652_word_end<
>169_word_end< query>256_word_end<>169_word_end< query >261_word_end<는 동적으로 실행될 >211_word_end<를 지정합니다. 매개 변수 >176_word_end<식은를 통해 계산 된 >211_word_end< 문자열에 >729_word_end< 할 수 있습니다.>215_word_end<>260_word_end<>261_word_end<>262_word_end<
>185_word_end<>158_word_end< >735_word_end<>176_word_end<이없는. 각 실행>436_word_end< 출력 매개 변수 변수의 >69_word_end< 값은 결과 행으로 최종 >735_word_end<을 위해 저장됩니다. 기능을 >735_word_end<으로 >849_word_end<해야합니다>266_word_end<여러 출력 매개 변수가있을 때 >228_word_end<>224_word_end<>225_word_end<>270_word_end<>271_word_end<>272_word_end<
여기를 >215_word_end<하는 함수의 예는입니다.>158_word_end< >735_word_end<:
테이블 foo (FOOD INT, FOOSUBID >702_word_end729_word_end<; foo 값 (4, 5, 'Six')에 >729_word_end<; 함수를 만들거나 바꾸십시오 get_all_foo () foo setsof foo as를 >735_word_end<합니다 $ body $ >849_word_end<하다 r foo%rowtype; >574_word_end<하다 r >702_word_end<을 위해 foo fool where food 0을 선택하십시오 고리 - 여기>436_word_end< 약간의 처리를 할 수 있습니다 >158_word_end< r >735_word_end<; - >69_word_end< 선택의 >69_word_end< 행을 >735_word_end<합니다 엔드 >506_word_end<; 반품; 끝 $ body $ 언어 plpgsql; get_all_foo ();>436_word_end< *를 선택하십시오.
여기를 >215_word_end<하는 함수의 예는 >158_word_end<과 같습니다.>169_word_end< query:
함수 생성 get_available_flightid (날짜) >670_word_end<를 설정합니다 $ body $ >574_word_end<하다 >211_word_end<를 >735_word_end<합니다 비행>436_word_end< 여기서 FlightDate = $ 1 및 FlightDate <($ 1 + 1); - 실행이 완료되지 않았으므로 행이 >735_word_end<되었는지 확인할 수 있습니다. - 그렇지 않으면 >840_word_end<를 제기하십시오. 찾을 수없는 경우 >840_word_end<를 제기 ' %>436_word_end< 비행 >810_word_end<', $ 1; 끝 IF; 반품; 끝 $ body $ 언어 plpgsql; - >215_word_end< 가능한 항공편을 >735_word_end<하거나 >840_word_end<가없는 경우 - >215_word_end< 가능한 항공편. 선택 *>436_word_end< get_available_flightid (current_date);>436_word_end< 선택하십시오.
>281_word_end<>69_word_end<의 구현>735_word_end< >158_word_end<>170_word_end<>169_word_end< query>286_word_end<>154_word_end<>288_word_end<>154_word_end<>215_word_end<자는이 제한이없는 설정 회복 함수를 정의 할 수 있습니다. >69_word_end< 데이터가 디스크에 기록되기 >574_word_end<하는 지점은에 의해 제어됩니다.>291_word_end<>292_word_end<
>294_word_end<>170_word_end<>296_word_end<>297_word_end<>154_word_end<>299_word_end<>294_word_end<:
>294_word_end< >359_word_end< 그런 >158_word_end< >359_word_end< end >294_word_end<
>294_word_end< >359_word_end< >314_word_end
>294_word_end< >359_word_end< 그런 >158_word_end< >359_word_end< Els>294_word_end< >359_word_end< 그런 >158_word_end< >359_word_end< >562_word_end< IF
>305_word_end<>296_word_end<:
>296_word_end< >359_word_end< >221_word_end< >359_word_end< 그런데 >359_word_end< ELSE >359_word_end< >562_word_end< >296_word_end<
>309_word_end<
>294_word_end<부울->176_word_end<>314_word_end<>315_word_end<종료 >294_word_end<;
>294_word_end<->314_word_end
>325_word_end<
v_user_id < 0 인 경우 >215_word_end<자 >731_word_end<는 이메일 = v_email user_id = v_user_id를 설정합니다. 끝 If;
>294_word_end<>330_word_end<>314_word_end<>315_word_end<>333_word_end<>315_word_end<종료 >294_word_end<;
>294_word_end<->314_word_end
>325_word_end<
Parentid가 null >228_word_end< parentid = ''인 경우. 그 >158_word_end<에 풀 >647_word_end<을 >735_word_end<하십시오. 또 다른 hp_>479_word_end<_filename (parentid) ||를 >735_word_end<합니다 '/'|| 풀 >647_word_end<; 끝 If;
>342_word_end<
>294_word_end<부울->176_word_end<>314_word_end<>315_word_end<[els>294_word_end<부울->176_word_end<>314_word_end<>315_word_end<[els>294_word_end<부울->176_word_end<>314_word_end<>315_word_end< >359_word_end<]>361_word_end<>333_word_end<>315_word_end< >365_word_end<
>366_word_end<>294_word_end<->314_word_end
>381_word_end<
>294_word_end< number = 0이면 결과 : = 'Zero'; Els>294_word_end< >799_word_end< 0 결과 : = '긍정적'; Els>294_word_end< >799_word_end< <0 결과 : = '부정'; 또 다른 - 흠, 유일한 다른 가능성은 숫자가 null이라는 것입니다. 결과 : = 'null'; 끝 If;
>383_word_end<els>294_word_end<>385_word_end<>333_word_end<>294_word_end<.
>388_word_end<>294_word_end<->314_word_end
>391_word_end<
>392_word_end<종료 >294_word_end<>394_word_end<>294_word_end<, >215_word_end<하는 것보다 훨씬 번거 롭습니다els>294_word_end<>398_word_end<
>296_word_end<>402_word_end<>221_word_end<>176_word_end<[, >176_word_end<[ >359_word_end< ]] 그런 >158_word_end<>315_word_end<[>221_word_end<>176_word_end<[, >176_word_end<[ >359_word_end< ]] 그런 >158_word_end<>315_word_end< >359_word_end< >425_word_end<>333_word_end<>315_word_end< >429_word_end<
>430_word_end<>296_word_end<>432_word_end<>402_word_end<>434_word_end<>176_word_end<>436_word_end<>221_word_end<>438_word_end<>315_word_end<실행 된 >158_word_end< 컨트롤이 >158_word_end< 명령문으로 통과합니다>441_word_end<>442_word_end<>443_word_end<>176_word_end<이 평가되지 않습니다.) 일치가없는 경우>333_word_end< >315_word_end<실행됩니다. 하지만 >294_word_end<>333_word_end<>450_word_end<>451_word_end<>452_word_end<
>158_word_end<은 간단한 예입니다.
케이스 x 그때 1, 2 msg : = '하나 >228_word_end< 둘'; 또 다른 MSG : = '하나 >228_word_end< 두 이외의 기타 값'; >441_word_end<;
케이스 >221_word_end<부울->176_word_end<>314_word_end<>315_word_end<[>221_word_end<부울->176_word_end<>314_word_end<>315_word_end< >359_word_end< >425_word_end<>333_word_end<>315_word_end< >429_word_end<
>472_word_end<>296_word_end<부울 >176_word_end<의 진실을 기반으로 >855_word_end<부 실행을 제공합니다. 각>221_word_end<절부울->176_word_end<>478_word_end<>479_word_end<>480_word_end<>315_word_end<실행 된 >158_word_end< 컨트롤이 >158_word_end< 명령문으로 전달됩니다>441_word_end<>442_word_end<>221_word_end<>176_word_end<이 평가되지 않습니다.) 진정한 결과가 없으면>333_word_end< >315_word_end<실행됩니다. 하지만 >294_word_end<>333_word_end<>450_word_end<>451_word_end<>452_word_end<
>381_word_end<
케이스 x가 0>436_word_end< 10 사이에있을 때 msg : = '값은 0과 10 사이입니다. 11>436_word_end< 20 사이의 x MSG : = '값은 11 ~ 20 사이입니다. >441_word_end<;
>497_word_end<>296_word_end<>499_word_end<>294_word_end<->314_word_end
>505_word_end<>506_word_end<, >508_word_end<, >510_word_end<, >512_word_end<, >514_word_end<및>514_word_end
[ >523_word_end<>524_word_end< >526_word_end<>315_word_end<엔드 >506_word_end< [ >524_word_end< >220_word_end<
>506_word_end<AN에 의해 종료 될 때까지 무기한 반복되는 무>855_word_end< >506_word_end<를 정의합니다.>508_word_end<>228_word_end<>169_word_end<>315_word_end<. 선택 사항>524_word_end<>508_word_end<및>510_word_end<중첩 >506_word_end< 내의 명령문을 지정하여 해당 >315_word_end<을 참조하십시오.
>508_word_end< [ >524_word_end< >550_word_end<>221_word_end<부울->176_word_end< >220_word_end<
>555_word_end<>524_word_end<주어지면, 가장 안쪽 >506_word_end<가 종료되고 >158_word_end<은 >158_word_end<에엔드 >506_word_end<>158_word_end<에 실행됩니다. 만약에>524_word_end<주어지면 전류 >228_word_end< 일부 외부 레벨의 중첩 >506_word_end< >228_word_end< 블록의 >524_word_end<이어야합니다. 그런 >158_word_end< >506_word_end블록의 해당 후 명명 된 >506_word_end< >228_word_end< 블록이 종료되고 제어가 >510_word_end<됩니다>562_word_end<.
>294_word_end<>221_word_end<지정되어 있습니다. >506_word_end< 종료는 만 발생합니다.부울->176_word_end<사실입니다. 그렇지 않으면 제어는 이후에 >315_word_end<로 전달됩니다.>508_word_end<.
>508_word_end<모든 유형의 >506_word_end<와 함께 >215_word_end<할 수 있습니다. 무>855_word_end< >506_word_end<와 함께 >215_word_end<하는 것은 국한되지 않습니다.
a>574_word_end<>575_word_end<>508_word_end<블록 끝 이후 >158_word_end< 명령문에 제어를 전달합니다. 이 목적으로 라벨을 >215_word_end<해야합니다. 표지되지 않은>508_word_end<>579_word_end<>574_word_end<블록. (이것은 >113_word_end< >151_word_end< 릴리스>436_word_end<의 변화입니다Postgre>156_word_end<.>508_word_end<>585_word_end<>574_word_end<>587_word_end<
>325_word_end<
>506_word_end< - 일부 계산 count 0이면 >508_word_end<; - 종료 >506_word_end< 끝 IF; 엔드 >506_word_end<; 고리 - 일부 계산 count 0 일 때 종료; - >151_word_end< 예와 동일한 결과입니다 엔드 >506_word_end<; >523_word_end< ablock >574_word_end<하다 - 일부 계산 주식이 100000이면 자제 종료; - >574_word_end< 블록>436_word_end< 종료됩니다 끝 IF; - 여기에 계산은 주식 100000시를 건너 뛸 것입니다. 끝;
>510_word_end< [ >524_word_end< >550_word_end<>221_word_end<부울->176_word_end< >220_word_end<
>555_word_end<>524_word_end<주어지면, 가장 안쪽 >506_word_end<의 >158_word_end< 반복이 >574_word_end<됩니다. 즉, >506_word_end< 본체에 남아있는 모든 >315_word_end<은 건너 뜁니다. 다른 >506_word_end< 반복이 필요한지 여부를 결정하기 위해 >506_word_end< 제어 >176_word_end<식 (있는 경우)으로의 제어 리턴이 >735_word_end<됩니다. 만약에>524_word_end<존재하고, 실행이 >510_word_end< 될 >506_word_end<의 >524_word_end<을 지정합니다.
>294_word_end<>221_word_end<지정되어 있으며, >158_word_end< >506_word_end< 반복은에만 >574_word_end<됩니다.부울->176_word_end<사실입니다. 그렇지 않으면 제어는 이후에 >315_word_end<로 전달됩니다.>510_word_end<.
>510_word_end<모든 유형의 >506_word_end<와 함께 >215_word_end<할 수 있습니다. 무>855_word_end< >506_word_end<와 함께 >215_word_end<하는 것은 국한되지 않습니다.
>325_word_end<
>506_word_end< - 일부 계산 카운트 100의 경우 종료; 카운트 <50을 >510_word_end<하면 >510_word_end<하십시오. - [50 >652_word_end< 100]의 카운트 계산에 대한 일부 계산 엔드 >506_word_end<;
[ >523_word_end<>524_word_end< >623_word_end<부울->176_word_end<>506_word_end<>315_word_end<엔드 >506_word_end< [ >524_word_end< >220_word_end<
>314_word_end<>512_word_end<>315_word_end<은만큼 일련의 >315_word_end<을 반복합니다.부울->176_word_end<>479_word_end<로 평가합니다. >176_word_end<식은 >506_word_end< 본체에 각 입력 직전에 확인됩니다.
>325_word_end<
>512_word_end< Voll_owed 0 및 G>294_word_end294_word_end 506_word_end< - 여기에 일부 계산 엔드 >506_word_end<; >506_word_end<가 완료되지 않은 동안 - 여기에 일부 계산 엔드 >506_word_end<;
[ >523_word_end<>524_word_end< >646_word_end<>647_word_end<>648_word_end<>649_word_end<]>176_word_end< >652_word_end< >176_word_end<[>655_word_end<>176_word_end< ] >521_word_end<>315_word_end<엔드 >506_word_end< [ >524_word_end< >220_word_end<
>497_word_end<>514_word_end<다양한 >670_word_end< 값을 반복하는 >506_word_end<를 만듭니다. 변수>647_word_end<>669_word_end<>670_word_end<>506_word_end< 안에만 존재합니다 (변수 >647_word_end<의 기존 정의는 >506_word_end< 내>436_word_end< 무시됩니다). 범위의 하부 및 상한을 제공하는 두 >176_word_end<은 >506_word_end<에 들어갈 때 한 번 평가됩니다. 인 경우>655_word_end<>673_word_end<>655_word_end<조항. >506_word_end< 항목>436_word_end< 다시 한 번 평가됩니다. 만약에>649_word_end<지정된 >158_word_end< 각 반복 후에 추가하지 않고 단계 값을 빼냅니다.
>670_word_end<의 일부 예>514_word_end<>506_word_end< :
I의 경우 1>652_word_end<10 >506_word_end< - >506_word_end< 내>436_word_end< 1,2,3,4,5,6,7,8,9,10 값을 취할 것입니다. 엔드 >506_word_end<; 반전 10>652_word_end<1 >506_word_end< - >506_word_end< 내>436_word_end< 10,9,8,7,6,5,4,3,2,1 값을 취할 것입니다. 엔드 >506_word_end<; 반전 10>652_word_end<1 x 2 >506_word_end< - >506_word_end< 내>436_word_end< 10,8,6,4,2 값을 맡을 것입니다. 엔드 >506_word_end<;
하한이 상한보다 큰 경우 (>228_word_end<.>649_word_end<>296_word_end<), >506_word_end< 본체는 전혀 실행되지 않습니다. 오류가 발생하지 않습니다.
a>524_word_end<|>514_word_end<>506_word_end< 그러면 >670_word_end< >506_word_end< 변수는 자격있는 >647_word_end<으로 참조 할 수 있습니다.>524_word_end<.
다른 유형의 >215_word_end<>514_word_end<>506_word_end<, >211_word_end< 결과를 반복하고 그 데이터를 조작 할 수 있습니다. 구문은 >158_word_end<과 같습니다.
[ >523_word_end<>524_word_end< >646_word_end<>701_word_end<>702_word_end<>211_word_end<>521_word_end<>315_word_end<엔드 >506_word_end< [ >524_word_end< >220_word_end<
>314_word_end<>701_word_end<는 레코드 변수, 행 변수 >228_word_end< 쉼표로 분리 된 스칼라 변수 목록입니다>816_word_end<>701_word_end<|>211_word_end<및 >506_word_end< 본체는 각 행에 실행됩니다. 예는 >158_word_end<과 같습니다.
함수 생성 refresh_mviews ()는 >670_word_end<를 $$로 >735_word_end<합니다 >849_word_end<하다 mviews 레코드; >574_word_end<하다 '모든 구체화 된 견해를 상쾌하게하는 것'; mviews >702_word_end< mv_schema로 n.nspname을 선택하고, c.relname as mv_name, PG_CATALOG.pg_GET_USERBYID (C.Relowner)는 소유자입니다 pg_catalog.pg_class c 왼쪽 가입 pg_catalog.pg_namespace n on (n.oid = c.relnamespace) 여기서 c.relk>702_word_end359_word_end<', quote_ident (mviews.mv_schema), quote_ident (mviews.mv_name), quote_ident (mviews.owner); 'Refresh Resisized View'를 실행하십시오 || quote_ident (mviews.mv_schema) || '.' || quote_ident (mviews.mv_name); 엔드 >506_word_end<; '상쾌한 구체화 된 견해를 수행했습니다.'; >735_word_end< 1; 끝; $$ 언어 plpgsql;
>506_word_end<가 an에 의해 종료 된 경우>508_word_end<명령문, 마지막 지정된 행 값은 >506_word_end< 후에도 여전히 액세스 할 수 있습니다.
>314_word_end<>211_word_end<이 유형>436_word_end< >215_word_end<>514_word_end<명령문은 발신자에게 행을 >735_word_end<하는 >156_word_end< 명령이 될 수 있습니다 :>727_word_end<가장 일반적인 경우이지만 >215_word_end<할 수도 있습니다>729_word_end<, >731_word_end<>228_word_end<>733_word_end<>505_word_end<>735_word_end<>736_word_end<>737_word_end<>738_word_end<
>154_word_end<변수는 >211_word_end< 텍스트로 대체되며 >211_word_end< 계획은 재>215_word_end< 가능한 재>215_word_end<을 위해 캐시됩니다.>741_word_end<>170_word_end<>743_word_end<.
>314_word_end<>514_word_end<->702_word_end<-Execute>315_word_end<은 오버 행을 반복하는 또 다른 방법입니다 :
[ >523_word_end<>524_word_end< >646_word_end<>701_word_end<>261_word_end<>755_word_end<[>215_word_end<>176_word_end<[>218_word_end< ]] >521_word_end<>315_word_end<엔드 >506_word_end< [ >524_word_end< >220_word_end<
이것은 소스 >211_word_end<가 문자열 >176_word_end<식으로 지정되며, 이는 각 항목에 대해 평가 및 대체 된 것을 제외하고는 >151_word_end< 형식과 같습니다.>514_word_end<>506_word_end<. 이를 통해 프로그래머는 사전 계획된 >211_word_end<의 속도 >228_word_end< 일반 >211_word_end<의 유연성을 선택할 수 있습니다.>261_word_end<>315_word_end<. 와 마찬가지로>261_word_end<, 매개 변수 값을 동적 명령에 >729_word_end< 할 수 있습니다>215_word_end<.
결과를 반복 해야하는 >211_word_end<를 지정하는 또 다른 방법은 커서로 >849_word_end<하는 것입니다. 이것은에 >737_word_end<되어 있습니다.섹션 40.>123_word_end<.
>314_word_end<>514_word_end
[ >523_word_end<>524_word_end< ] >514_word_end>701_word_end<[>798_word_end<>799_word_end< >801_word_end<>176_word_end<>521_word_end<>315_word_end<엔드 >506_word_end< [ >524_word_end< >220_word_end<
>810_word_end<>798_word_end<>228_word_end< >294_word_end<>798_word_end< 0지정되어 있으며, >506_word_end<는 평가하여 생성 된 배열의 개별 요소를 통해 반복됩니다>176_word_end<>816_word_end<>701_word_end<변수는 각 요소 값이 순서대로 할당되며 각 요소에 대해 >506_word_end< 본체가 실행됩니다. >158_word_end<은 >670_word_end< 배열의 요소를 통한 루핑의 예입니다.
함수 sum 생성 (>702_word_end702_word_end 735_word_end<합니다 >849_word_end<하다 s >702_word_end 702_word_end 574_word_end<하다 배열 $ 1의 Foreach X 고리 S : = S + X; 엔드 >506_word_end<; >735_word_end< s; 끝; $$ 언어 plpgsql;
>820_word_end<>701_word_end<는 일반적으로 단일 변수 일 뿐이며 복합 값 (레코드) 배열을 통해 반복 할 때 변수 목록 일 수 있습니다. 이 경우 각 배열 요소에 대해 변수는 복합 값의 연속적인 열>436_word_end< 할당됩니다.
>823_word_end<>798_word_end<>825_word_end<>514_word_end
함수 만들기 scan_rows (>702_word_end189_word_end<를 $$로 >735_word_end<합니다 >849_word_end<하다 x >702_word_end 220_word_end< >574_word_end<하다 배열 $ 1의 Foreach X Slice 1 고리 통지 '행 = %', x; 엔드 >506_word_end<; 끝; $$ 언어 plpgsql; Select Scan_rows (배열 [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]); 통지 : Row = 1,2,3
>836_word_end<PL/PG>156_word_end<함수는 함수의 실행 및 실제로 주변 트랜잭션의 실행을 중단시킵니다. a를 >215_word_end<하여 오류를 가두고 복구 할 수 있습니다.>574_word_end<>840_word_end<>841_word_end<>574_word_end<>843_word_end<
[ >523_word_end<>524_word_end< >361_word_end<>849_word_end<>849_word_end< ] >574_word_end<하다>315_word_end<>840_word_end< >221_word_end<>855_word_end<[>228_word_end<>855_word_end< >359_word_end< ] 그런 >158_word_end<h>170_word_end[>221_word_end<>855_word_end<[>228_word_end<>855_word_end< >359_word_end< ] 그런 >158_word_end<h>170_word_end >359_word_end< >872_word_end<
오류가 발생하지 않으면>497_word_end< 블록이 모든 것을 실행합니다>315_word_end<, 그런 >158_word_end< 컨트롤이 >158_word_end< 문으로 전달됩니다.end. 그러나 내>436_word_end< 오류가 발생하면>315_word_end<, 추가 처리>315_word_end<버려졌고 토토 꽁 머니가로 통과합니다.>840_word_end<목록. 목록은 첫 번째를 검색합니다>855_word_end<발생한 오류와 일치합니다. 일치가 발견되면 해당h>170_word_end
44638_44644>855_word_end<>647_word_end<은에 표시된 >647_word_end< 일 수 있습니다.범퍼카 토토 : 문서 : 9.4 : 범퍼카 토토 범퍼카 토토 코드. 카테고리 >647_word_end<은 해당 범주 내>436_word_end< 오류와 일치합니다. 특별 >855_word_end< >647_word_end<기타을 제외한 모든 오류 유형과 일치합니다.query_canceled. (가능하지만 종종 현명하지는 않지만query_canceled>647_word_end<으로) >855_word_end< >647_word_end<은 대소 문자에 민감하지 않습니다. 또한 오류 >374_word_end<에 의해 지정할 수 있습니다.sqlstate코드; 예를 들어, 이것들은 동일합니다 :
say division_>655_word_end<_zero 당시 >359_word_end< sqlstate '22012'때 >359_word_end<
선택한 내>436_word_end< 새 오류가 발생하는 경우h>170_word_end
오류가 발생할 때>840_word_end<절, 조항PL/PG>156_word_end<함수는 오류가 발생했을 때와 마찬가지로 유지되지만 블록 내의 영구 데이터베이스 상태로의 모든 변경 사항이 롤백됩니다. 예를 들어이 조각을 고려하십시오 :
mytab에 >729_word_end< (FirstName, lastName) 값 ( 'Tom', 'Jones'); >574_word_end<하다 mytab set firstName = 'joe'여기서 lastName = 'Jones'; x : = x + 1; Y : = x / 0; >840_word_end< Division_>655_word_end<_zero가있을 때 'Caught Division_>655_word_end<_Zero'를 통지하십시오. >735_word_end< x; 끝;
토토 꽁 머니가 할당에 도달하면y, A로 실패합니다.division_>655_word_end<_zero오류. 이것은에 의해 잡힐 것입니다.>840_word_end<절. >735_word_end< 된 값>169_word_end<명령문은 증분 값이 될 것입니다x그러나의 효과>731_word_end<명령이 롤백됩니다>816_word_end<>729_word_end<>151_word_end< 블록 앞의 명령은 롤백되지 않으므로 최종 결과에는 데이터베이스에 포함되어 있습니다.Tom JonesnotJoe Jones.
팁 :an을 포함하는 블록>840_word_end<절은 하나가없는 블록보다 입력 및 종료하는 데 훨씬 비싸다. 따라서 >215_word_end<하지 마십시오>840_word_end<필요없이.
예 40-2. >840_word_end<>731_word_end</>729_word_end<
이 예제는 >840_word_end< 처리를 >215_word_end<하여 하나를 수행합니다>731_word_end<>228_word_end<>729_word_end<, 적절하게 :
테이블 DB 생성 (>702_word_end702_word_end 189_word_end<를 >735_word_end<합니다 $$ >574_word_end<하다 고리 - 먼저 키를 >731_word_end<하십시오 DB SET B = 데이터를 >731_word_end<합니다. 여기서 a = 키; 그럼 발견된다면 반품; 끝 IF; - 거기에 있지 않으므로 키를 >729_word_end<하십시오 - 다른 사람이 동시에 같은 키를 동시에 >729_word_end<하면 -우리는 독특한 키 실패를 얻을 수 있습니다 >574_word_end<하다 db (a, b) 값 (키, 데이터)에 >729_word_end<; 반품; 그때 고유 한 >840_word_end< - 아무것도하지 않고 >731_word_end<를 다시 시도하려면 >506_word_end<하십시오. 끝; 엔드 >506_word_end<; 끝; $$ 언어 plpgsql; merge_db (1, 'david')를 선택하십시오. merge_db (1, 'dennis')를 선택하십시오.
이 코딩은를 가정합니다.고유 _violation오류는에 의해 발생합니다.>729_word_end<>729_word_end<테이블의 트리거 함수>436_word_end<. 테이블에 고유 한 인덱스가 둘 이상인 경우 오작동 할 수도 있습니다. 어떤 색인이 오류를 일으킨 지에 관계없이 작업을 재 시도하므로 오류가 발생할 수 있습니다. 갇힌 오류가 예상되는지 확인하기 위해 >158_word_end<에 논의 된 기능을 >215_word_end<하여 더 많은 안전을 가질 수 있습니다.
>840_word_end< 핸들러는 발생한 특정 오류를 식별해야합니다. >69_word_end< >840_word_end<에 대한 정보를 얻는 두 가지 방법이 있습니다.PL/PG>156_word_end<: 특수 변수 및스택 진단 받기>262_word_end<
>840_word_end< 핸들러 내>436_word_end< 특수 변수sqlstate제기 된 >840_word_end<에 해당하는 오류 코드가 포함되어 있습니다 (참조표 A-1가능한 오류 코드 목록의 경우). 특별 변수sqlerrm>840_word_end<와 관련된 오류 메시지가 포함되어 있습니다. 이 변수는 외부 >840_word_end< 처리기 외부의 정의되지 않았습니다.
>840_word_end< 핸들러 내>436_word_end<를 >215_word_end<하여 >69_word_end< >840_word_end<에 대한 정보를 검색 할 수도 있습니다.스택 진단 받기명령, 양식이 있습니다.
스택 진단 받기가변= | : =항목[ >218_word_end< >220_word_end<
각항목지정된 상태 값을 식별하는 핵심 단어변수(이를 수신하기에 적합한 데이터 유형이어야 함). >69_word_end< >215_word_end< 가능한 상태 항목은에 표시됩니다.표 40-2.
표 40-2. 오류 진단 항목
>647_word_end< | 타입 | >737_word_end< |
---|---|---|
>169_word_end |
텍스트 | >840_word_end<의 >156_word_end |
column_name | 텍스트 | >840_word_end<와 관련된 열의 >647_word_end< |
제약 _name | 텍스트 | >840_word_end<와 관련된 제약 >855_word_end<의 >647_word_end< |
PG_DATATYPE_NAME | 텍스트 | >840_word_end<와 관련된 데이터 유형의 >647_word_end< |
Message_Text | 텍스트 | >840_word_end<의 기본 메시지의 텍스트 |
table_name | 텍스트 | >840_word_end<와 관련된 테이블의 >647_word_end< |
Schema_Name | 텍스트 | >840_word_end<와 관련된 스키마의 >647_word_end< |
pg_exception_detail | 텍스트 | >840_word_end< 세부 메시지의 텍스트가있는 경우 |
pg_exception_h>702_word_end |
텍스트 | >840_word_end< 힌트 메시지의 텍스트가 있다면 |
pg_exception_context | 텍스트 | >840_word_end<시 통화 스택을 >737_word_end<하는 텍스트의 줄 (참조섹션 40.6.7) |
>840_word_end<가 항목의 값을 설정하지 않으면 빈 문자열이 >735_word_end<됩니다.
>381_word_end<
>849_word_end< text_var1 텍스트; text_var2 텍스트; text_var3 텍스트; >574_word_end<하다 - >840_word_end<가 발생할 수있는 일부 처리 >359_word_end< 다른 사람들이 >840_word_end< 스택 진단 받기 텍스트 _var1 = message_text, text_var2 = pg_exception_detail, text_var3 = pg_exception_h>702_word_end
>314_word_end<진단 받기명령, >151_word_end<에 >737_word_end< 된섹션 40.5.5는 >69_word_end< 실행 상태에 대한 정보를 검색합니다 (스택 진단 받기위>436_word_end< 논의한 명령은 >151_word_end< 오류로 실행 상태에 대한 정보를보고합니다). 그것은PG_CONTEXT상태 항목은 >69_word_end< 실행 위치를 식별하는 데 유용합니다.PG_CONTEXT통화 스택을 >737_word_end<하는 텍스트의 줄이있는 텍스트 문자열을 >735_word_end<합니다. 첫 번째 줄은 >69_word_end< 함수와 >69_word_end< 실행 중입니다진단 받기>262_word_end< 두 번째 및 후속 선은 호출 함수를 통화 스택 위로 추가로 나타냅니다. 예를 들어:
함수 생성 >228_word_end< 교체 outer_func () >670_word_end<를 $$로 >735_word_end<합니다 >574_word_end<하다 >169_word_end< >702_word_end702_word_end 670_word_end<를 $$로 >735_word_end<합니다 >849_word_end<하다 스택 텍스트; >574_word_end<하다 진단 스택 = pg_context를 얻으십시오. 통지 e '--- 전화 스택 --- \ n%', 스택; >735_word_end< 1; 끝; $$ 언어 plpgsql; >727_word_end< auter_func (); 주목 : --- 전화 스택 --- >154_word_end< 함수 get 진단>436_word_end< 5 번 라인 5 >154_word_end< 함수 outer_func () 라인 3시 컨텍스트 : >154_word_end< 함수 outer_func () 3 행 >735_word_end< outer_func ------------ 1 (1 행)
스택 진단 받기 >359_word_end< pg_exception_context동일한 종류의 스택 추적을 >735_word_end<하지만 >69_word_end< 위치가 아닌 오류가 감지 된 위치를 >737_word_end<합니다.
PostgreSQL : 문서<< | 홈 | PostgreSQL : 문서<< |
기본 >315_word_end< | 와이즈 토토 : 문서 :<< | 커서 |