Anonim

Makikilala ng database mavens ang pangalan na Oracle bilang isang powerhouse sa pamamahagi ng database management system (DBMS) na mundo. Ang Oracle ay gumawa ng napakataas na mga solusyon sa DBMS nang maraming dekada at nananatiling pinuno sa larangan. Maraming mga end-user ng mga produkto ng database ang maaaring nalito o nag-ayos kapag gumagamit sila ng isang paunang natukoy na solusyon at bumubuo ito ng isang mensahe ng error. Ang isang karaniwang mensahe ng error na ginawa ng Oracle ay ang error na ORA-06512.

Tingnan din ang aming artikulo Paano Upang Ayusin ang hindi-00942 Error

Ang Oracle ay isang sistema ng pamamahala ng database na halos apatnapung taon sa iba't ibang anyo. Ito ay orihinal na gumamit ng isang bagay na tinatawag na scotto ng SCOTT, na pinangalanang isa sa mga orihinal na empleyado ng Oracle. Nag-log ka pa sa Oracle sa unang pagkakataon gamit ang 'scott' ng username at 'tiger' ng password na pinangalanan pagkatapos ng pusa ni Scott. Ngayon maraming mga scheme na ginamit depende sa ginagamit mo sa Oracle.

Kung nais mong malaman ang higit pa tungkol sa Oracle mula sa ground up, ang pahinang ito ay napaka-kapaki-pakinabang.

Ang pag-aayos ng ORA-06512 error

Sa Oracle, ang isang error sa ORA-06512 ay isang pangkalahatang error sa pagbubukod na nagsasabi sa iyo kung saan may mali. Ito ay isa sa hindi bababa sa tiyak na mga error na ginawa ng Oracle, dahil sinasabi lamang sa iyo na mayroong problema, ngunit hindi kung ano ang nangyayari.

Halimbawa, maaaring basahin ang isang tipikal na mensahe ng error:

"ORA-01422: ang eksaktong sundin ay nagbabalik ng higit sa hiniling na bilang ng mga hilera

ORA-06512: sa "DATABASE_NAME", linya 66

ORA-06512: sa linya 1 ″

Sinasabi sa iyo ng unang linya kung anong uri ng error ang nangyayari, sa kasong ito, ang query ay nagbabalik ng mas maraming data kaysa sa inaasahan ng query upang hindi nito alam kung paano mahawakan ito. Ang 'ORA-01422' code ay ang aktwal na error code na kailangan mong tingnan. Ang ORA-06512 lamang ang pangkalahatang error code.

Ang ikalawang linya ay nagsasabi sa iyo kung saan nagaganap ang error. Ang DATABASE_NAME ay magiging anumang database na iyong pinagtatrabahuhan sa oras. Ang linya ng 66 ay ang linya kung saan nangyayari ang error at ang linya na kailangan mong suriin upang iwasto ang error.

Ang ikatlong linya sa syntax error ay nagsasabi sa iyo kung saan nagmula ang tawag. Suriin ang linya ng isa at makakakita ka ng isang tawag sa DATABASE_NAME.

Upang ayusin ang partikular na error na ito, kailangan mong ayusin ang isyu na sanhi ng ORA-01422, na 'eksaktong pagkuha ng boto ay higit pa sa hiniling na bilang ng mga hilera' o kailangan mong magdagdag ng isang tagagawa ng pagbubukod upang sabihin sa Oracle na huwag pansinin ito. Tulad ng pag-aayos ng pangunahing isyu ay palaging kanais-nais, ito ang paraan upang pumunta.

Mayroong dalawang bagay na maaari mong gawin. Kung inaasahan mong babalik ang query sa higit sa isang solong hilera, maaari mo itong baguhin upang hindi ito magulat. Kung inaasahan mo lamang na bumalik ang isang query sa isang solong hilera, maaari mo ring baguhin ito.

Inaasahan ng higit sa isang solong hilera:

para sa X in (piliin * mula sa t kung saan …)

ikot

- Proseso ang talaang X dito

pagtatapos ng loop;

Dapat itong burahin ang error sa mga query sa database kung saan higit sa isang hilera ang ibabalik.

Kung aasahan mo lamang na ibabalik ang isang solong hilera, maaari mong subukan:

magsimula

piliin ang * into….

mula sa kung saan….

proseso ….

pagbubukod

kapag NO_DATA_FOUND noon

error sa paghawak ng code kapag walang natagpuan na tala

kapag TOO_MANY_ROWS noon

error sa paghawak ng code kung maraming mga tala ang natagpuan

wakas;

Ang pangalawang pamamaraan na ito ay dapat na maghatid lamang ng isang solong hilera nang hindi itapon ang 'ORA-01422: ang eksaktong pagkuha ay nagbabalik ng higit sa hiniling na bilang ng mga pagkakasala ng mga hilera at samakatuwid ang orihinal na error na ORA-06512.

Maaari mo ring i-tweak ang query upang maibabalik lamang nito ang unang hilera ng isang maramihang sagot. Maaaring gumana ito kung wala kang kumpletong kontrol sa database o hindi mo nais na gulo sa mga bagay ngunit kailangan mo pa rin ng sagot.

magpahayag

c1 cursor para sa piling * mula sa kung saan …

magsimula

buksan ang c1;

sunduin ang c1 sa ..

kung (c1% notfound) kung gayon

error sa paghawak para sa walang natagpuan record

tapusin kung;

malapit c1;

wakas;

(Kung alam mo ang SQL, maaari kang maging maliit na nalilito sa mga linya ng utos na ito … Si Oracle ay hindi gumagamit ng Transact-SQL ngunit sa halip ito ay sariling pamamaraan ng pagsasaayos ng wika ng SQL, PL / SQL. Habang katulad sa Transact-SQL, ginagawa ng PL / SQL maraming matalinong mga bagay at isang napakalakas na tool sa sarili nitong karapatan. Maaari mong makita ang kapaki-pakinabang na PL / SQL FAQ na ito kapag sinusubukan mong malaman ang tungkol sa Oracle.)

Kaya ang pangunahing aralin dito ay kaysa sa isang error sa ORA-06512, sa at ng sarili nito, ay hindi isang bagay na maaari mong ayusin nang direkta. Sa halip kailangan mong malaman kung ano ang aktwal na pagkakamali, na sasabihin sa iyo ng iba pang mga error code, at pagkatapos ay harapin ang mga pagkakamali nang paisa-isa.

Mayroon ka bang anumang tip o trick ng Oracle upang ibahagi? Ipaalam sa amin ang tungkol sa mga ito sa mga komento!

Paano ayusin ang mga error na wala-06512 sa oracle db