"FOR LOOP" vs "FETCH,OPEN,CLOSE"


#1

PLSQL програм нь PLSQL runtime engine – тай, SQL нь SQL runtime engine – тай ба Хэрвээ PLSQL дотор SQL бичигдсэн байвал PLSQL REngine -> SQL REngine – луу “context switch” хийгддэг. Эсрэгээрээ мөн SQL REngine – с PLSQL REngine – лүү бас хийнэ.

Context switch гэдэг нь PLSQL REngine – аас SQL REngine – рүү удирдлагыг бүрэн шилжүүлж боловсруулалт хийхийг хэлдэг . Нэг ёсондоо context switch – нь тодорхой хугацаа, resource шаарддаг, өртөгтэй үйлдэл.

PLSQL бичхэд LOOP бичих шаардлага гарах нь их байдаг ба "FOR LOOP" болон "FETCH, OPEN,CLOSE" гэсэн байдлаар давтах боломжтой Эдгээрийн гол ялгаа нь:

“FOR LOOP” – г ашигласнааар PLSQL implicit байдлаар cursor – г удирдана. 11g дээр default-р 100 мөр fetch хийгдэх бүрт нэг удаа cursor нээгдэж хаагдана, 1 л удаа context switch хийнэ. 1сая мөр уншихад нийт далд байдлаар 10k cursor нээж хаагдаж, 10k л context switch хийгдэнэ гэсэн үг. (+ sql logic - с хамаарна. )

Харин “FETCH, OPEN, CLOSE” – г ашиглавал PLSQL explicit байдлаар cursor – оо зохицуулхыг шаардах буюу, бид бүх management – г өөрсдөө хийнэ, Хэзээ нь CURSOR нээх, хэзээ хаах, дунд нь ямар төрлийн алдаа гарвал ямар exception өгөх зэрэг бүхий л management – ийн асуудлыг manual байдлаар удирдах юм. Гэхдээ FETCH бүр дээр буюу 1 мөр бүрт 1 context switch хийгдэнэ. 1сая мөр fetch хийгдэхэд, 1сая context switch хийгдэнэ. (BULK COLLECT ашиглаагүй үед)

Иймээс ихэнх case дээр “FOR LOOP” - г ашигласанаар найдвартай, хурдан байдаг байна. :slight_smile:

#forDevelopers