Процедуруудыг SQL дээр хадгалах. авч байна Vidalennya журам. Хадгалсан процедурын БУЦАХ холбоос

Хэрэв би SQL Server дээрх мэдэгдлийг ялсан гэм буруутай бол дараах процедурыг хадгалах ёстой юу?

Би танд динамик ундаа үүсгэхийг зөвшөөрье, бид параметрүүдийг хэрхэн сайжруулах вэ?

Тэдгээрийн аль нь хамгийн тод харагдаж, аль нь хамгийн сайн, аль нь хамгийн бага вэ?

Хадгалж буй процедурыг хараарай, тэд санах ойг байнга хэмнэж байна уу?

Мэдэгдэл нь виртуал хүснэгтийг, процедур нь материалын хүснэгтийг үүсгэдэг гэж юу гэсэн үг вэ?

Сайхан сэтгэлтэй бай, цэгийн талаар надад мэдэгдээрэй, яксчо өмхий.

"Яагаад журам, хадгаламж, татварын хооронд ялгаа байдаг вэ?" вэбээс цуглуулах шийдэл.

Ө виртуалширээ. Мэдээлэл нь нэг хүснэгтээс олдсон тул та илгээсэн хүснэгтийн тоо хүртэл ирж, өгөгдөл илгээх өргөдлийг ялах боломжтой.

Сонгосон функцийн параметрүүдийг сонгох процедурыг хадгалсан бөгөөд ингэснээр өгөгдөл оруулах эсвэл бусад утгыг эргүүлэх эсвэл өгөгдлийн багц шинэчлэгдэнэ.

Мэдэгдлүүд болон хадгалагдаж байгаа процедуруудыг үүсгэсэн - эдгээрийн талаар Майкрософтоос өшөө авахын тулд тэдгээрийг ялсан эсэх, яагаад.

Надад хоёр ширээ байна гэж бодъё:

tbl_user Stovptsi: .user_id, .user_name, .user_pw

tbl_profile Stowpci: .profile_id, .user_id .profile_description

Тиймээс, би эдгээр хүснэгтүүдийг ИЛҮҮ АВАХ гэж оролдож байгаа тул ... үүний оронд CLEAR peice sql дээр ажиллахын тулд би харагдахыг ашиглах болно, жишээлбэл:

CREATE vw_user_profile AS харах A.user_id, B.profile_description FROM tbl_user A зүүн нэгдэх tbl_profile B дээр A.user_id = b.user_id GO

Тиймээс, ирээдүйд би користувачийн id-д зориулж profile_description хүсэлт гаргахыг хүсч байна ... миний дээрэмдэхэд шаардлагатай бүх зүйл,

user_id = @ID ХААНА vw_user_profile-аас profile_description-ийг СОНГОХ

Энэ кодыг хадгалсан процедурт тохируулж болно, жишээлбэл:

Процедурыг үүсгэх dbo.getDesc @ID int AS эхлэл vw_user_profile-аас profile_description-ыг СОНГОХ user_id = @ID END END GO

Үүний тулд би утасдаж болно

Dbo.getDesc 25

мөн би koristuvach 25 де 25 - таны параметрийн ID-ийн тайлбарыг устгасан.

BAGATO илүү байгаа нь ойлгомжтой, гэхдээ гол санаа нь бага байна.

Ар талд нь доромжлол нь өөр өөр яриа гэдгийг ойлгох хэрэгтэй. Процедурын хэмнэлт нь INSERT-UPDATE-DELETE мэдэгдлүүдийн хувьд илүү ялалт байгуулдаг. Эдгээр мэдүүлэг нь СОНГОХ мэдэгдлийн үндэслэлтэй. мөн та ялсан дургүйцлийн буруутай.

Виста дээр та өгөгдлийг өөрчлөх боломжгүй.

Харна уу: Энэ бол өөр өөр бодит мэдээллийн сангийн хүснэгтүүдийн нэг буюу хэд хэдэн мөр, баганаас бүрдэх виртуал хүснэгт юм. Tse загвар rowk_v болон stovpts_v k_lkoh хүснэгт. Та энд ямар ч параметр дамжуулах боломжгүй.

Хадгалах журам: SQL мэдэгдлийн багцыг урьдчилан ашиглах ба үүний тулд та оролтын өгөгдөл гэх мэт параметрүүдийг засах, гаралтын өгөгдлийг устгах боломжтой.

Хадгалсан процедурт харагдах байдлыг харуулах боломжтой, харин хадгалсан процедурыг Views-д харуулах боломжгүй...!

Хэрэв энгийн SQL хангалтгүй байвал shovischa процедур ялна. Хадгалах журам, хадгалагдаж буй бусад процедурын мөчлөг, мөчлөгийг өөрчлөх хэрэгтэй. Tse mova програмчлал биш, mova zapitіv.

    Харагдах байдал нь хөдөлгөөнгүй байдаг. Тэдгээрийг энгийн зохион байгуулалттай шинэ хүснэгтүүд мэт төсөөлөөд үз дээ, тэдгээрийн доторх өгөгдөл нь дур зоргоороо бүтээгдэж байгаа бөгөөд таны бүх зүйлийг бий болгосон. Ямар ч SQL хүснэгтийн нэгэн адил та WHERE , GROUP BY болон ORDER BY -ээр ангилж, шүүж болно.

    Та ажил хийдэг гэдгээ хойш нь тавиарай.

    Мэдээллийн үндсэн дээр тавих Tse. Уучлаарай, зүгээр л асуулга ажиллуулаад үр дүнг шүүнэ үү. Гэсэн хэдий ч Oracle шиг өгөгдлийн сан нь үндсэн өгөгдлийн төрлийг өөрчлөх үед автоматаар шинэчлэгддэг тул үндсэн хүснэгт дээрх шиг "материалжсан" мэдэгдлүүдийг үүсгэх боломжийг олгодог.

    Мэдэгдэлийг материалжуулах нь мэдэгдлийн баганад (ялангуяа өгөгдлийн сангийн хаана ч байдаггүй тооцоолсон баганууд дээр) индекс үүсгэх боломжийг олгодог.

    Би таны юу хэлж байгааг ойлгохгүй байна.

Гол ялгаа нь хэрэв та мэдүүлэг өгөхийг хүсч байгаа бол уг тэмдэглэгээг таны хүсэлтэд оруулсан болно. Уг процедур нь үр дүнг өгч чадна, гэхдээ энэ нь эмхэтгэсэн бөгөөд маш хурдан юм. Хоёр дахь сонголт бол мэдэгдлийг индексжүүлэх явдал юм.

SQL View нь SQL SELECT асуулгад суурилсан виртуал хүснэгт юм. Мэдээллийг нэг буюу хэд хэдэн өгөгдлийн сангийн хүснэгтэд эсвэл бусад өргөдөлд зориулж илгээнэ. Мэдээллийн сангийн энэхүү mittєvy тэмдэг нь авсан процедурын нэгэн адил гүйцэтгэлийн нэг төлөвлөгөөнд нэгтгэгдсэн Transact-SQL хэллэгүүдийн бүлэг юм.

Перегляд бол өгөгдлийн сангийн хүснэгтэд хадгалагдсан өгөгдлийн энгийн үзүүлбэр бөгөөд яг л хэсэг бүлэг операторуудын хадгалдаг процедуртай адил бөгөөд үүнийг зөрчиж болно.

Бүртгэгдсэн илүү, oscillki vodobrazhae хүснэгтээс өгөгдөл, хэрхэн асуух талаар, зүгээр л sql-заавар цуглуулах журам.

Энэ өгүүллийг буцаах: Хадгалагдаж байгаа процедуруудыг хянана уу. Чиний шивнэж байгаа хүмүүс

@Патрикийн хэлэх нь зөв, та өөр хоолоо харж, санах ойд өөртөө View үүсгэх хэрэгтэй, мөн дараагийн төрөлд Joins, Data, нэгтгэл задарсан ч гэсэн та дуусгаж болно. өлсөж байгаа бололтой.

Тусламж авахын тулд #tmpTable1 гэх мэт Temp Hash Table1 эсвэл @tmpTable1 санах ойд бүх ажлыг хадгалах процедурыг хадгална уу. Залежно v_d таны хэлэхийг хүссэн зүйлээ.

Хийж буй процедур нь функцтэй төстэй боловч шууд нэрээр дуудагддаг. zamіst funktsіy, yakі үнэндээ хүсэлтийн дунд vikoristovuyutsya.

Мэдээжийн хэрэг, ихэнх тохиолдолд хүснэгтүүд санах ойд байдаг, учир нь та маш их мөнгө авдаггүй.

Махеш зөв биш, хэрвээ тэр дарс уухыг зөвшөөрвөл та алба гувчуураас алба гувчуурыг өөрчилж чадахгүй. Аав аа, Патрикийг хараач

CREATE vw_user_profile AS харах A.user_id, B.profile_description FROM tbl_user A зүүн нэгдэх tbl_profile B дээр A.user_id = b.user_id

Би өгөгдлийг шинэчилж чадна ... өгзөг шиг, би үүнийг цих эсэхийг шийдэж чадна ...

vw_user_profile-г шинэчлэх profile_description="Менежер"-ийг хэрэглэгчийн_id=4 гэж тохируулна уу

tbl_profile-ийг шинэчилнэ үү. user_id=4 байх profile_description="Менежер"-ийг тохируулна уу

Хүснэгтийн бүх талбарууд байхгүй тул та үүнийг мэдэгдэлд оруулах боломжгүй бөгөөд PROFILE_ID нь үндсэн түлхүүр бөгөөд NULL байж болохгүй гэж би бодож байна. Гэхдээ та мөн vistavu дээр INSERT оруулж болно...

Би үндсэн ширээнд зориулж програм үүсгэсэн, використ ...

SELECT * харагдац шиг View Junk үүсгэ

Хог хаягд (код, нэр) утгыг оруулна уу ("глин", "Глин Робертс"), ("Мэри", "Мариан Робертс")

ID>4 хаягаас УСТГАХ

І INSERT, і DELETE нэг цэг дээр ажилласан

Мэдээжийн хэрэг, талбарууд нь нэгтгэсэн эсэх, эсвэл хамгаалагдсан эсэх, эсвэл мэдэгдэл мөн эсэхийг өөрчлөх боломжгүй, хэрэв тэдгээр нь зүгээр л шууд мэдэгдэл бол тэдгээрийг өөрчилж болно.

Хэрэв та нэгээс олон хүснэгт харсан бол оруулах, харах боломжгүй, харин нэгээс олон хүснэгт харсан бол дуугарна.

Нэмэлт сэтгэгдлүүдийг зааж өгөхөөс гадна би Үзэлтийн талаар зарим нэг хүндэтгэлийг нэмж хэлмээр байна.

  1. Бэлэг нь prikhovuvannya нугалах нь ялалт байж болно. Төсөл дээр 5 хүн ажилладаг, тэдгээрийн зөвхөн нэг нь өгөгдлийн сан, жишээлбэл, эвхэгддэг холбоодтой баг болсон өөрийн хувилбарыг харуул. Ийм нөхцөлд дарс үүсгэж болох бөгөөд энэ нь багийн бусад гишүүдэд амархан хүсэлт гаргах боломжтой бөгөөд өмхий хэлтэрхий нь нэг хүснэгтийг асууж болно.
  2. Аюулгүй байдлыг хялбархан хэрэгжүүлэх боломжтой Views. Бид гэж хэлье spіvrobіtnikхүснэгтүүд Цалин , SSN дугаар. Иргэд хардаггүй користувачуудыг хайж байгаад буруугүй. Ийм байдлаар бид хүснэгтийн баганыг сонгох, зөвшөөрөл өгөхгүй гэх мэт мэдэгдлийг үүсгэж болно. би , тийм ээгэх мэт зөрчилдөөнгүй тайлбар хийхгүйгээр (жишээлбэл, цалингийн тухай гэх мэт, бид өмнө нь хэрхэн таамаглаж байсан талаар). Одоо бид хүснэгтэд шууд хүсэлт илгээхийг харж болно ажилтантэгээд зүгээр л сэдвээс уншихын тулд үүнийг хадгалаарай. Ийм байдлаар бид тусламжийн Views-ийн аюулгүй байдлыг ухамсарлаж чадна.

Дуу хоолойн процедур

ЖУРАМ ҮҮСГЭ [({IN|OUT|INOUT} [,…])]
[ДИНАМИК үр дүнгийн багц ]
ЭХЛЭХ [АТОМ]

ТӨГСГӨЛ

Түлхүүр үгс
. IN (Оролт) – оролтын параметр
. OUT (Output) – гаралтын параметр
. INOUT - оролт ба гаралт, түүнчлэн талбар (параметргүй)
. DYNAMIC RESULT SET Процедур нь курсоруудын тоог зааж өгөх боломжтой бөгөөд ингэснээр процедурыг буцаасны дараа процедурыг хааж болно.

Тэмдэглэл
Хадгалсан процедурын олон параметрүүдийг (жишээлбэл, их тоо, тэмдэгтийн мөрийн өмнө) стекийг дахин өөрчлөх замаар өөрчлөхийг зөвлөдөггүй. Практикт Transact-SQL, PL/SQL болон Informix-ийн үндсэн аялгуу нь дуут болон өөр өөр параметрүүд, дуут өөрчлөлтүүд, мөн хэрэглэгчийн интерфэйсийн хувьд стандарттай нийцэж байна. Хадгалсан процедурын кэшийн хэмжээг үнэлэхийн тулд дараагийн ойртлыг зогсоохыг Майкрософт зөвлөж байна:
\u003d (нэг цагийн ажлын coristuvachiv хамгийн их тоо) * (ирцийн хамгийн том төлөвлөгөөний туршилт) * 1.25. Төлөвлөгөөнөөс хамааран талуудыг DBCC MEMUSAGE командын тусламжтайгаар өргөтгөж болно.

Виклик процедур

Баян DBMS-ийн хувьд хадгалагдсан процедурын жагсаалтыг операторын тусламж болгон ашигладаг.

ЖУРАМ ГҮЙЦЭТГЭХ [(][)]

Анхаарна уу: Хурдан хадгалах процедурыг програмууд, хадгалах боломжтой бусад процедур эсвэл интерактив горимд хадгалах боломжтой.

Дуу хоолойны процедурын жишээ

PROCEDURE CREATE Proc1 AS // процедурыг бүдгэрүүлнэ
ЗАРЛАХ Cur1 200 // курсорыг цочирдуулна
OPEN Cur1 // курсорыг нээ
FETCH NEXT FROM Cur1 //курсороос өгөгдлийг унших
WHILE @@Fetch_Status=0
ЭХЛЭХ
Cur1-с ДАРААХ АВАХ
ТӨГСГӨЛ
CLOSE Cur1 // курсорыг хаа
Cur1
EXECUTE Proc1 // процедурыг ажиллуулна

Полиморфизм
Эдгээр хоёр дэд программын параметрүүд нь нэг төрлийн нэг төрлийн ертөнцөд байдаг тул ижил нэртэй хоёр дэд программыг нэг схемд үүсгэж болно, ингэснээр тэдгээрийг салгаж болно. Нэг схемд ижил нэртэй хоёр дэд программыг ялгахын тулд тэдгээрийн арьсанд өөр, өвөрмөц нэр (тодорхой нэр) өгдөг. Хэрэв дэд хөтөлбөр боловсруулж байгаа бол ийм im'ya оноож болно. Хэд хэдэн ижил нэртэй дэд программыг дуудахдаа шаардлагатай дэд хөтөлбөрүүдийн тэмдэглэгээг багахан хугацаанд төлнө.
. Ихэнх тохиолдолд бүх процедурыг өгөгдсөн нэрээс хуваарилдаг бөгөөд хэрэв тийм зүйл байхгүй бол бүх функцийг өгөгдсөн нэрнээс авдаг.
. Илүү гүнзгий дүн шинжилгээ хийхийн тулд эдгээр дэд хөтөлбөрүүд орхигдсон тул олон зуун ийм даниталууд виконання (ГҮЙЦЭТГЭХ) давуу эрхтэй байж болно.
. Їх сонгох ті, yakі mayut vіdpodіdaє аргументуудын тоо vikliku дахь parametrіv тоог. Эдгээр албан тушаалын өгөгдлийн төрлүүд болон параметрүүдийг шалгана.
. Хэрэв нэгээс олон дэд хөтөлбөр алдагдсан бол хамгийн богино мэргэшилтэй програмыг сонгоно.
Oracle-ийн практикт полиморфизмыг зөвхөн багцад илэрдэг функцүүдэд зөвшөөрдөг. [имэйлээр хамгаалагдсан]- Бусад схемүүд болон Sybase болон MS SQL Server-д фокус хаагдсан байдаг.

Видалення ба журмын өөрчлөлт
Алсын процедурын хувьд операторыг ашигладаг:

Процедурыг өөрчлөхийн тулд операторыг сонгоно:

ЖУРАМЫГ ӨӨРЧЛӨХ [([{IN|OUT|INOUT}])]
ЭХЛЭХ [АТОМ]

ТӨГСГӨЛ

Виконання журмын давуу эрх

ГҮЙЦЭТГЭХ АЖИЛЛАГАА TO |НИЙТИЙН [ТЭТГЭЛЭГЛЭЛТТЭЙ]

Системийн процедур
Баян DBMS (SQL серверийг оруулаад) нь ижил системийн процедуртай байж болох тул та үүнийг өөрийн зорилгодоо тохируулж болно.

Хадгалах журам

Энэхүү түгээлтийн сэдэв нь бизнесийн логикийг хэрэгжүүлэхийн тулд InterBase мэдээллийн сангийн нэмэлтээр жижиглэн худалдаачдад танилцуулсан хамгийн чухал хэрэгслүүдийн нэг юм. болон даалгавруудыг тохируулахад шаардагдах кодын хэмжээг өөрчлөх Хадгалсан процедурыг өөрчлөхгүйгээр мэдээллийн сангийн програмыг дуусгах нь бараг боломжгүй юм.
Ихэнх харилцааны DBMS-д чухал ач холбогдолтой хадгалагдах процедуруудын өргөн сонголт байгаа хэдий ч InterBase процедур нь бараг бүрэн гүйцэд өгөгдлийн багцын үүргийг гүйцэтгэж, тодорхой SQL асуулгад үр дүнг эргүүлэх боломжийг олгодог.
Relobders, Scho ихэвчлэн дуусгах, Эрт "Журмын зүгээр л Сарлаг Kdіr SPEM SPL-SQL-хөтөч, Yakі stonna бат бөх динами Үндсэн Dones, БУЦАХ ISNUє DUMKA, SHO GRAYUVATI WITH PROCTIONS, SHO ZEBYUGAUM, Nabaatiifolds өндөр түвшинд.
InterBase-д ямар процедурууд хадгалагддаг вэ?
Хадгалагдсан процедур (CP) нь InteiBase серверийн цөмд оруулсан хөрвүүлэгчийн тусгай хэлээр бичигдсэн InterBase програмын дотоод дэд программаас эмхэтгэсэн өгөгдлийн сангийн мета өгөгдлийн нэг хэсэг юм.
Процедурыг хадгалахыг үйлчлүүлэгчийн програмууд, триггерүүд болон хадгалагдсан бусад процедуруудаас дуудаж болно. Процедурыг серверийн процессын дундуур хадгалдаг бөгөөд та өгөгдлийн сан дахь өгөгдлийг удирдахаас гадна ялалтынхаа үр дүнг хэрхэн товших (эдгээр HP, нэмэлт) дээр үйлчлүүлэгчийг эргүүлж болно.
HP-ийн тавьсан хэцүү боломжуудын үндэс нь INSERT, UPDATE, SELECT гэх мэт гайхалтай SQL-ийн саналуудыг өөрчлөх, дүн шинжилгээ хийх, мөчлөгийг зохион байгуулах гэх мэт өөрийн агуулахад хийж болох процедурын хэлний програмчлал юм. (IF, WHILE), түүнчлэн хадгалагдсан Mova процедурууд нь өгөгдөлтэй ажиллах эвхэгддэг алгоритмуудыг хэрэгжүүлэх боломжийг олгодог бөгөөд HP-ийн харилцааны өгөгдөлтэй ажиллахад анхаарал хандуулах нь уламжлалт хэлтэй ижил төстэй процедурын хувьд илүү нягтралтай байдаг.
Энэ нь гох нь маш ижил програмчлалын нь ялалт гэдгийг тэмдэглэх нь зүйтэй, гэмт хэргийн шинж чанар, хил бага байна. Vіdmіnnostі pіdmіnnostі pіdnіzhini movi, trigery-д scho vikoristovuєєtsya, vіd mivi KHP-г "Тригери" хэсэгт (1-р хэсэг) хянасан гэж мэдээлсэн.

Хадгалагдсан энгийн процедурын жишээ

Хадгалагдсан эхний процедурыг бий болгох цаг, її өгзөг дээр хадгалах процедурыг бий болгох үйл явц ирлээ. Дараачийн эхэнд эдгээрийн талаар хэдэн үг хэлье, хадгалсан журмаар хэрхэн дадлага хийх талаар. InterBase баримтжуулалт нь SQL скрипт дэх нэмэлт файлуудын процедурыг бий болгохыг зөвлөж байна, энэ нь CP-ийн текстийг, учир нь тэдгээр нь isql орчуулагчийн оролт руу орж байгаа тул тэдгээрийг цэвэрлэж, энэ SQL дээрх шиг CP-ийн өөрчлөлтийг бий болгоно. BLR-ийг BLR процедурын текст болгон эмхэтгэх үе шатанд байгаа скрипт (BLR процедурын текстийн талаар Rozdіl "InterBase мэдээллийн сангийн бүтэц" (4-р хэсэг) хэсгийг үзнэ үү) winkle pardon, дараа нь isql нь SQL-ийн аль мөрөнд байгааг харуулах болно. скрипт файл winkla tsya өршөөл. Өршөөлийг засч, бүх зүйлийг ар араасаа давт. Өдөр тутмын ойлголтод нагодженнягийн тухай, өөрөөр хэлбэл трасування выконаннягийн тухай, өөрчлөлтийн утгыг өөрчлөхөд гайхах боломжтой тул та замаасаа гарч чадахгүй. Ийм pidhid нь жижиглэнгийн худалдаачдын нүдээр хадгалагдаж буй журмын хувийн шинж чанарыг нэмэгдүүлэхтэй тохирохгүй нь ойлгомжтой.
HP-ийг хөгжүүлэх стандарт минималист хандлагын проте, цөцгий<_\ществ\ют также инструменты сторонних разработчиков, которые делают работу с хранимыми процедурами весьма удобной Большинство универсальных продуктов для работы с InterBase, перечисленных в приложении "Инструменты администратора и разработчика InterBase", предоставляют удобный инструментарий для работы с ХП. Мы рекомендуем обязательно воспользоваться одним из этих инструментов для работы с хранимыми процедурами и изложение материала будем вести в предположении, что у вас имеется удобный GUI-инструмент, избавляющий от написания традиционных SQL-скриптов
Хадгалсан процедурын синтаксийг дараагийн алхамаар тайлбарлав.

ЖУРАМЫН нэрийг CREATE
[(парам өгөгдлийн төрөл [, параметрийн өгөгдлийн төрөл...])]
)]
AS
;
< procedure_body> = []
< block>
< vanable_declaration_list> =
DECLARE VARIABLE var datatype;

=
ЭХЛЭХ
< compound_statement>
[< compound_statement> ...]
ТӨГСГӨЛ
< compound_statement> = (мэдэгдэл;)

Том хэмжээтэй, төвөгтэй мэт санагдах боловч үнэндээ бүх зүйл илүү хялбар байдаг.
Дахин хэлэхэд өгзөгний тэнхлэг нь хоёр тоог оруулан нэмээд үр дүнг нь эргүүлдэг тул энгийн процедур юм.

ЖУРАМ ҮҮСГЭХ SP_Нэмэх(эхний_арг ДАВХАР НАРИЙН,
second_arg ДАВХАР НАРИЙН)
БУЦАХ (Үр дүн ДАВХАР НАРИЙН)
AS
ЭХЛЭХ
Үр дүн=first_arg+second_arg;
ТУСГАЛАХ;
ТӨГСГӨЛ

За, бүх зүйл энгийн: CREATE PROCEDURE командын дараа шинээр үүсгэсэн процедурын нэрийг (өгөгдлийн сангийн хил хязгаарт өвөрмөц байж болно) зааж өгсөн болно - энэ SP_Add дусал, дараа нь оролтын параметрүүдээр дамжуулан гарны хувьд. HP төрлийг дахин тохируулсан - first_arg болон second_arg - өгөгдсөн утгуудаас.
CREATE PROCEDURE мэдэгдлийн хэлний бус хэсэг дэх оролтын параметрүүдийн жагсаалт - хэрэв түүний ажлын горимын бүх өгөгдлийг процедурын гол хэсэгт байрлах хүснэгтэд нэмэлт оруулах зорилгоор авсан бол алгасах болно.

Хадгалагдсан процедуруудад InteiBase скаляр өгөгдлийн төрлүүд байдаг

Түлхүүр үгийг RETURNS өг, үүний дараа параметрүүд нь томилогдсон төрлүүдийн дагуу эргэлддэг гарт дахин зохион байгуулагддаг - энэ ангилалд зөвхөн нэг нь - Үр дүн.
Хэрхэн журам параметрүүдийг эргүүлэх буруугүй юм, үг RETURNS болон параметрийн жагсаалтыг эргүүлэх, өдөр бүр.
RETURNSQ түлхүүр үг AS-г зааж өгсний дараа. AS түлхүүр үгийн өмнө гарчиг,мөн шинийн дараа - техожурам.
Уг процедурын үндсэн хэсэг нь дотоод (орон нутгийн) өөрчлөлтүүдийн тайлбаруудын хуулбар юм (өмхий гэх мэт, бид үүнийг доор авч үзэх болно), комын дараа (;), блокоор хуваагдсан цэгээр хуваагдана. операторуудын, оператор нуман дахь байрлалууд BEGIN END. Энэ тохиолдолд HP-ийн бие нь бүр ч хялбар байдаг - бид танаас хоёр оролтын аргумент нэмж, үр дүнг гаралтад хавсаргаж, дараа нь SUSPEND командыг дуудахыг хүсч байна. Trohi pіznіshe roz' энэ нь di ї tsієї тушаалын мөн чанар нь тодорхой байна, гэхдээ одоохондоо энэ нь тэнд эргэж параметрүүдийг дамжуулах шаардлагатай байгаа нь чухал юм, Bula viklikan одод журмыг хадгалсан.

Хадгалсан процедурын өөрчлөлтүүд

Процедурын дунд байгаа оператор кома (;) бүхий толботой төгсөх болно гэдгийг хүндэтгэ. Стандарт SQL командын дистрибьютер гарах цэг нь танилцуулга командын текст зөв бөгөөд түүнийг боловсруулах шаардлагатай гэсэн SQL орчуулагч руу дохио өгч байгаа бололтой. Чи тийм биш харж байна, scho, HP дунд кома нь толбо харуулж, SQL орчуулагч тушаалыг яг оруулсан байна гэдгийг хүлээн зөвшөөрч, процедурын хэсгийг vikonat оролддог, юу авч байна? Tse pripuschennya биш maє sensu. Жишээлбэл, хэрэв та файл үүсгэж, энэ тохиолдолд заавар бичих, өгөгдлийн сангаас эхлүүлэх команд нэмж, isql орчуулагчийн тусламжийн SQL скриптийг туршиж үзэхэд өршөөл эргэж, энэ нь эргэх болно. тохиромжгүй байх, хэлмэрчийн бодлоор, тушаалын төгсгөлд авсан процедурыг бий болгох. InterBase роумерын тусгай хэрэгслийг ашиглахгүйгээр нэмэлт SQL скрипт файлуудын процедурыг хадгалахын тулд арьсны командын өмнө HP (триггерүүд ч мөн адил) йогийн урам зоригийг бий болгох шаардлагатай. SQL санал хуваагчийг өөрчилдөг isql тушаал дараах байдалтай байна.

ХУГАЦАА ТОХИРУУЛАХ

Процедурыг бий болгох ердийн аргын хувьд анхаарах зүйл нь дараах байдалтай байна.

ХУГАЦАА ТОГТООХ ^;
PROCEDURE ҮҮСГЭХ зарим нэг процедур
... . .
ТӨГСГӨЛ
^
ХУГАЦАА ТОГТООХ ;^

Долоо хоног бүр хадгалах журам

Юуг анхаарах ёстойгоо журамдаа авч үзье. Одоо, хэрэв энэ нь үүсгэгдсэн бол дуудаж, параметрүүдийг дамжуулж, эргүүлсэн үр дүнг авах шаардлагатай. Үүнийг хийхэд илүү хялбар байдаг - доромжилсон харагдахын тулд SQL асуулга бичихэд хангалттай.

СОНГОХ *
Sp_add-аас (181.35, 23.09)

Цэй биднийг нэг эгнээ эргүүлэхийг хүссэн бөгөөд энэ нь зөвхөн нэг Үр дүнгийн талбарыг авч хаях бөгөөд үүнд 181.35 ба 23.09 тоонуудын нийлбэр, дараа нь 204.44 өөрчлөгдөх болно.
Ийм байдлаар манай процедурыг үйлчлүүлэгчийн программууд болон бусад HP эсвэл триггерүүд шиг хакердсан тусгай SQL асуулгад хакердуулж болно. Хийх процедурын төгсгөлд SUSPEND командыг нэмснээр бидний процедурын энэ өөрчлөлт боломжтой болсон.
Баруун талд, InterBase-д (мөн түүний бүх клонуудад) хоёр төрлийн процедурыг хадгалдаг: сонгох боломжтой процедурууд ба гүйцэтгэх процедурууд. Vіdminnіst роботуудад tsikh dvіv vіdіv ChP pogaє тэр процедур-vibіrki дуудлагад vihіdnіkh parametrіv дахь хувийн бус багцыг эргүүлэх, дараалан бүлэглэх, yakі өгөгдлийн багцыг харж болох ба vikonuvanі процедур нь параметрүүдийг эргүүлэх эсвэл эргүүлэх боломжгүй. Тэдгээрийн Returns-д параметрийн нэг мөр. Сонгосон процедурууд нь SELECT асуулгын хажууд дуудагдах ба дуудагдсан процедурууд нь EXECUTE PROCEDURE командын тусламжтайгаар хийгдэнэ.
Хадгалсан процедуруудыг хараад гомдоосон, ижил синтакс үүсгэсэн бөгөөд албан ёсоор юу ч эсэргүүцдэггүй, дараа нь уг процедурыг SELECT асуулгад ашиглаж болох эсэх, процедур-сонголт нь ГҮЙЦЭТГЭХ ЖУРАМ-ын тусламжид зориулагдсан эсэх. Хоол тэжээл нь CP янз бүрийн төрлийн ёс бус үйлдэлтэй хэрхэн харьцаж байгаад оршино. Өөрөөр хэлбэл, долоо хоног бүрийн дуулах төрөлд зориулсан процедурын загвар нь ялгаатай байна. Тиймээс сонгон шалгаруулах процедурыг SELECT асуулгад тусгайлан зориулж, сонгосон процедурыг ГҮЙЦЭТГЭХ АЖИЛЛАГАА асуулгад тусгайлан үүсгэсэн болно. Эдгээр хоёр төрлийн HP-ийг зохион бүтээхдээ ямар хүчийг анхаарч үзэхийг харцгаая.
Ойлгохын тулд, процедур-чичиргээг хэрхэн дадлагажуулах, онол руу бага зэрэг орох. SELECT ID, NAME FROM Table_example гэх мэт энгийн SQL хайлтыг авцгаая. Үүний үр дүнд бид хоёр багана (ID ба NAME) болон ижил тооны мөрүүдээс (Хүснэгт_жишээнд ижил тооны мөр) бүрдэх гаралтын хүснэгтийг харгалзан үздэг. Энэ асуулгын үр дүнд хувирсан хүснэгтийг SQL өгөгдлийн багц гэж нэрлэдэг. . Дараа нь сервер нь хүсэлтийн үр дүнг илгээдэг арьсны бичлэгийг уншиж, түүнээс шаардлагатай талбаруудыг (ID болон NAME тохиолдолд) сонгоод үйлчлүүлэгч рүү мессеж илгээдэг. Процессыг дахин давтъя - арьсны чичиргээний бичлэгийн хувьд.
Ухаалаг уншигч бүх SQL өгөгдлийн багцууд, тэр дундаа хадгалагдсан процедурууд дараалан үүсдэг гэдгийг ойлгохын тулд бүх алхамуудыг хийх шаардлагатай! Процедурын гол vіdminnіst бол эхнийх нь нүүргүй эгнээ эргүүлэхэд зориулагдсан, бусад нь зөвхөн нэгд зориулагдсан байсан тул процедурыг сонгох явдал юм. Тийм ч учраас өмхий үнэр нь өөр өөр байдлаар zastosovyatsya: журам-сонголт нь бүх бүртгэлийг шалгах журамд "wimage" гэх мэт SELECT командын тусламжийг дууддаг тул та үүнийг эргүүлж болно. гэж нэрлэдэг журам нь "wiymaє" HP-аас зөвхөн нэг эгнээ, болон reshta (navit yakshcho өмхий!) Үл тоомсорлох гэх мэт ГҮЙЦЭТГЭХ ЖУРАМ-ын тусламж дуудсан байна.
Сонгон шалгаруулах журмын жишээг харцгаая, ингэснээр илүү ойлгомжтой болно. Учир нь > Өршөөлийн, -ын журмыг хадгалж үзье, сарлагийн саваг pratsyuє тийм адилхан, сарлагийн zap SELECT ID, NAME FROM Table_Example, тиймээс та талбаруудыг сонгох боломжгүй болно ID і NAME z usієї хүснэгт. өгзөгний тэнхлэг:

ЖУРАМ ҮҮСГЭХ Энгийн_Сонгох_SP
БУЦАХ (
procID бүхэл тоо,
procNAME VARCHAR(80))
AS
ЭХЛЭХ
ТӨЛӨӨ
Хүснэгтийн_жишээнээс НЭР СОНГОХ ID
INTO:procID, :procNAME
ХИЙХ
ЭХЛЭХ
ТУСГАЛАХ;
ТӨГСГӨЛ
ТӨГСГӨЛ

Simple_Select_SP гэж нэрлэгддэг процедурыг харцгаая. Үнэн хэрэгтээ, оролтын параметрүүд байхгүй бөгөөд гаралтын хоёр параметр - ID ба NAME. Naytsіkavіshe, zvichayno, tіlі журамд polagaє. FOR SELECT бүтэц энд байна:

ТӨЛӨӨ
Хүснэгтийн_жишээнээс НЭР СОНГОХ ID
INTO:procID, :procNAME
ХИЙХ
ЭХЛЭХ

/* бид procID болон procName-г өөрчлөх хэрэгтэй */

ТӨГСГӨЛ

Энэхүү shmachok код нь доромжилсон гэсэн үг юм: Хүснэгтийн_жишээ хүснэгтээс сонгосон арьсны эгнээний хувьд procID болон procName өөрчлөлтийн утгыг сонгоод дараа нь өөрчлөлтийн утгыг нэмнэ үү.
Та гадаад төрх байдал, хүсэлтийг боловсруулж болно: "Өөрчлөлт? Өөр яаж өөрчлөх 9" Энэ нь ялгаа нь гэнэтийн төстэй юм бол - хадгалагдаж байгаа журамд байгаа хүмүүс, бид өөрчлөлтийг ялах болно. HP-ийн хэлээр та процедурын дундуур орон нутгийн өөрчлөлт болгон дуу хоолойгоо илэрхийлж, оролт, гаралтын параметрүүдийг өөрчилсөн байдлаар цохиж болно.
Хадгалж буй процедурт орон нутгийн өөрчлөлтийг зарлахын тулд AS түлхүүр үгийн ард, эхний BEGIN үгийн өмнө тайлбар оруулах шаардлагатай. Орон нутгийн өөрчлөлтийн тайлбар дараах байдалтай байна.

Хувьсагчийг зарлах ;

Жишээ нь, орон нутгийн өөрчлөлт Mylnt уртыг зарлахын тулд, энэ нь AS болон BEGIN доромжилсон тайлбар хооронд оруулах шаардлагатай байна.

ХУВСАГЧИЙГ МЭДЭХ MyInt БҮХЭЛ Тоо;

Бидний өгзөгний өөрчлөлтийг хоёр ширхэгээр хийдэг. Учир нь тэдгээрийг FOR SELECT SQL-командын дундуур өөрчлөх, SELECT дээр сонгогдсон хүснэгтүүдийн талбаруудыг салгаж, өөрчлөхийн тулд үлдсэн давхаруудыг шилжүүлэх шаардлагатай болдог. Та өөрчилсөн ч гэсэн хүснэгтэн дэх талбарууд шиг ижил нэрээр нэрлэж болно!
Өөрчлөлтийн нэрний өмнө Ale dvokrapka зөвхөн SQL асуулга дунд ялах шаардлагатай байна. Двокрапкагүйгээр үхтэлээ тулалдах араатны бичвэрүүдтэй зураг тавь, жишээлбэл:

procName = "Зарим нэр";

Процедурынхаа үндсэн хэсэгт хандъя. FOR SELECT санал нь өгөгдлийг визуал хүснэгтүүд дээр эргүүлдэг - өгөгдлийн багц ба, нэг мөрөнд. Эргүүлсэн арьсны талбарыг өөрийн өөрчлөлтөөр байрлуулж болно: ID => procID, NAME => procName. DO болон өөрчлөлтийн нэг хэсэгт SUSPEND командын тусламжтайгаар процедур> p> гэж нэрлэсэн үйлчлүүлэгчээс асуудаг.
Ийм маягаар FOR SELECT... DO команд нь командын SELECT хэсэгт сонгогдсон бичлэгүүдийн давталтыг зохион байгуулдаг. ХБ-ийн нэг хэсэг болох ижил мөчлөгийн үед нэмэлт SUSPEND командыг гүйцэтгэсний дараа боловсруулсан бичлэгийг үйлчлүүлэгч рүү шилжүүлнэ.
Түүнчлэн, сонгох процедурыг нэг буюу хэд хэдэн эгнээ эргүүлэхэд хүлээн зөвшөөрдөг бөгөөд үүний тулд HP биеийн дунд циклийг зохион байгуулдаг бөгөөд энэ нь параметрийн өөрчлөлтийг сэргээх болно. Жишээлбэл, SUSPEND команд нь өгөгдлийн мөрийг үйлчлүүлэгч рүү эргүүлж байгаа мэт мөчлөгийн сүүлчийн мөчлөгт ашиглагдах ёстой.

Цикл ба операторууд

Krim FOR SELECT... DO командууд нь дурын сонголтын бичлэгүүдээс нэг мөчлөгийг зохион байгуулдаг өөр төрлийн цикл - WHILE...DO бөгөөд энэ нь аливаа оюун ухааныг дахин баталгаажуулсны үндсэн дээр циклийг зохион байгуулах боломжийг олгодог. Тэнхлэг хувьцааны HP, scho vikoristovu мөчлөг WHILE. ХИЙХ. Энэ процедур нь 0-ээс 99 хүртэлх бүхэл тооны квадратуудыг эргүүлнэ.

PROCEDJRE QUAD ҮҮСГЭ
БУЦАХ (Квадрат бүхэл тоо)
AS
ХУВЬСАГЧ I БҮХЭЛ ТОГ ЗАРЛАХ;
ЭХЛЭХ
i = 1;
ХЭЗЭЭ (и<100) DO
ЭХЛЭХ
КВАДРАТ=I*I;
I=I+1;
ТУСГАЛАХ;
ТӨГСГӨЛ
ТӨГСГӨЛ

SELECT FROM QUAD хүсэлтийн үр дүнд бидэнд 1-ээс 99 хүртэлх бүхэл тоонуудын квадраттай QUADRAT-ын нэг мөрийг орлуулах хүснэгт хэрэгтэй байна.
SQL-чичиргээ болон сонгодог мөчлөгийн үр дүнг хадгалахын тулд хадгалсан шилжих процедурт IF...THEN..ELSE операторыг сонгосон бөгөөд энэ нь танд өгөгдлийн алдаан доторх хязгаарлалтыг зохион байгуулах боломжийг олгоно. ирээдүй, синтакс нь Паскалийн талбай болон Cі дээр өндөр түвшний хөдөлгөөн програмчлалын ихэнх задлах операторуудтай төстэй эсэхээс үл хамааран.
Хөлийг нь дээрэмдэхийн тулд хадгалагдаж байгаа процедурын эвхэгддэг жишээг харцгаая.

  1. Хүснэгт_жишээнд дундаж үнийг тооцоолно уу ("Хүснэгтийн үндсэн түлхүүрүүд ба генераторууд" гэсэн хэсэг)
  2. Дали хүснэгтэд байгаа арьсны рекордыг дахин шалгаж эхлэхийн тулд үндсэн үнэ (ҮНЭ) дундаж үнээс өндөр байгаа тул дундаж үнийн дүнтэй тэнцэх үнийг тогтоож, усны бэхэлгээг тогтооно.
  3. Хэрэв үнэ нь дундаж үнээс доогуур буюу түүнээс дээш байвал үнийг нийт үнэд тэнцүүлж, энэ дундаж үнийн хооронд жижиглэнгийн үнийн хагасыг нэмнэ.
  4. Хүснэгтийн бүх мөрийн өөрчлөлтийг эргүүлнэ үү.

Кобын хувьд HP-ийн нэр чухал ач холбогдолтой бөгөөд оролт гаралтын параметрүүд нь бүх зүйл хадгалагдсан процедурын толгой хэсэгт бичигдсэн байдаг.

ЖУРАМ ҮҮСГЭХҮнийг нэмэгдүүлэх (
Хувь 2 Давхар нарийвчлалыг нэмэгдүүлэх)
БУЦАХ (ID БҮХЭЛ, НЭР VARCHAR(SO), шинэ_үнэ ДАВХАР
PRECISION AS

Уг процедурыг IncreasePrices гэж нэрлэх бөгөөд энэ нь DOUBLE PRECISION төрлийн байж болох Peiceni21nciease нэг оролтын параметртэй, ID, NAME болон new_pnce гэсэн 3 оролтын параметртэй. Эхний хоёр параметр нь бидний задлан шинжлэхээр сонгосон Хүснэгтийн_жишээ хүснэгтийн талбаруудтай ижил нэртэй байж болохыг анхаарна уу. Tse нь хадгалагдсан mov процедурын дүрмээр зөвшөөрөгдсөн.
Одоо орон нутгийн өөрчлөлтийг дуугаргах нь бидний буруу бөгөөд ингэснээр та дундаж утгыг хадгалахын тулд ялалт байгуулах болно. Та дараах байдлаар харагдах болно.

Хувьсах дундаж үнэ ДАВХАР НЯГТАЙ ЗАРЛАХ;

Одоо арчилж буй процедурын бие рүү шилжье BEGIN түлхүүр үг.
Бид алгоритмаа анх удаа тоолох хэрэгтэй - дундаж үнийг тооцоол. Бид хэнд зориулж ийм төрлийн хүсэлтийг хурдасгаж байна:

AVG СОНГОХ(үнэ_л)
Хүснэгтээс_Жишээ
INTO: дундаж_үнэ,-

Энэ нь AVG хувьсагчийн агрегат функцийг тэжээх бөгөөд ингэснээр сонгосон мөрүүдийн дундаж PRICE_1 талбарын дундаж утгыг эргүүлэх болно - бидний бүх хүснэгтийн PRICE_1 утгын дундаж Хүснэгт_жишээ. Хүсэлтийн дагуу эргүүлэх утгыг avg_price өөрчлөлтөд оруулна. Хүсэлтэнд ялсан усыг сэргээхийн тулд давхар хавтасны өмнө avg_pnce өөрчлөгдсөн хүндэтгэлийг сэргээх.
Энэ хүсэлтийн онцлог нь зөвхөн нэг оруулгыг үргэлж шалгадаг хүмүүс юм. Ийм хүсэлтийг singleton-requests гэж нэрлэдэг бөгөөд хадгалагдсан процедуруудаас зөвхөн ийм сонголтыг сонгох боломжтой. Хэрэв та нэгээс олон эгнээ эргүүлэхийг хүсвэл FOR SELECT...DO бүтцэд эргэлдэж буй арьсны мөрийг боловсруулах циклийг зохион байгуулах шаардлагатай.
Otzhe, бид үнийн дундаж утгыг авсан. Одоо бүх хүснэгтийг үзэж, арьсны рекорд дахь үнийн дүнг дундаж үнээр харьцуулж, амьдрах шаардлагатай байна.
Модон дээр бид хүснэгт_жишээний хүснэгтээс арьсны бичлэгийг ангилах ажлыг зохион байгуулдаг

ТӨЛӨӨ
СОНГОХ ID, NAME, PRICE_1
Хүснэгтээс_Жишээ
INTO:ID, :NAME, :new_price
ХИЙХ
ЭХЛЭХ
/*_энд бид арьсны бичлэгийг нээнэ*/
ТӨГСГӨЛ

Хүснэгтийн_жишээний хүснэгтээс дизайныг өөрчлөх үед арьсны эгнээний өгөгдөл болон усалгааны утгыг өөрчилсөн ID, NAME болон new_pnce өгнө. Эдгээр параметрүүдийг үндсэн параметр болгон өөрчилдөг гэдгийг та санаж байгаа байх, гэхдээ үр дүнд нь сонгосон өгөгдөл нь эргэлдэх нь эргэлзээтэй байдаг, гэхдээ гадаад параметрүүд оногдоогүй байгаа нь үйлчлүүлэгч гэсэн үг биш юм. HP үйлчлүүлэгч. qi үнэ цэнэ! Параметрүүдийг шилжүүлэх нь зөвхөн SUSPEND командыг идэвхгүй болгосон тохиолдолд л боломжтой бөгөөд үүнээс өмнө бид анхдагч параметрүүдийг үндсэн өөрчлөлт болгон өөрчлөх боломжтой - манай програмд ​​бид мөн new_price параметртэй ажилладаг.
Мөн BEGIN.. END мөчлөгийн их биеийн дунд хэсэгт бид арьсны эгнээний утгыг өөрчилж болно. Таны санаж байгаагаар бид дунджаас өсөж, хуучин цаг үед амьдрахын тулд зайлшгүй үнэ болохын тулд мэдэж байх ёстой. Mi-г тохируулах Qiu процедурыг IF операторын тусламжтайгаар хэрэгжүүлдэг.

ХЭРВЭЭ (шинэ_үнэ > дундаж_үнэ) ТЭГВЭЛ /*тиймээс одоогийн үнэ дундаж үнээс өндөр байна*/
ЭХЛЭХ
/*дараа нь дундаж үнийн дүнтэй тэнцэх шинэ үнийг тогтоож, хэдэн зуугаар нь тогтооно */
шинэ_үнэ = (дундаж_үнэ + дундаж_үнэ*(2 хувь/100));
ШИНЭЧЛЭХ Хүснэгт_жишээ
ҮНЭ_1 ТОХИРУУЛАХ = :шинэ_үнэ
ХААНА ID =: ID;
ТӨГСГӨЛ
ӨӨР
ЭХЛЭХ
/* Бодит үнэ нь дундаж үнээс бага буюу түүнээс дээш байвал бид үнийг нийт үнэд тэнцүүлэн тогтоох бөгөөд энэ дундаж үнийн хооронд жижиглэнгийн үнийн хагасыг нэмнэ */
new_price = (new_pnce + ((orta_pnce new_price)/2)) ;
ШИНЭЧЛЭХ Хүснэгт_жишээ
ҮНЭ_1 ТОХИРУУЛАХ = :шинэ_үнэ
ХААНА ID = .ID;
ТӨГСГӨЛ

Бахит шиг IF-ын агуу бүтээн байгуулалтыг дуусгах нь үнэхээр сайхан байсан, үүнийг хэлэлцэх нь чухал, тиймээс сэтгэгдэл бичихгүй байх, /**/ тэмдэгт дээр бичих дуртай.
Үнийг тооцоолсон жижиглэнгийн худалдаатай ижил аргаар өөрчлөхийн тулд бид UPDATE операторыг хурдасгадаг бөгөөд энэ нь танд нэг буюу хэд хэдэн бүртгэлийг өөрчлөх боломжийг олгодог. Ямар бүртгэлд үнийг өөрчлөх шаардлагатайг хоёрдмол утгагүй зааж өгөхийн тулд бид үндсэн түлхүүрийн WHERE талбарыг дамжуулалтын бичлэгийн ID утгыг авсан өөрчлөлтийн утгатай тэнцэх утгыг ойлгоход ялах болно: ID =: ID. Давхар дээлний өмнө үнэмлэх солигдсоныг хүлээн авна уу.
IF...THEN...ALSE бүтцийг өөрчилсний дараа өөрчлөгдсөн ID, NAME болон new_price нь өгөгдөлтэй байна, учир нь үйлчлүүлэгчийг процедурыг дуудах үүрэгтэй. Дараагийн ХЭРЭГЛИЙН хувьд SUSPEND командыг оруулах шаардлагатай бөгөөд ингэснээр өгөгдөл тэнд илгээгдсэн тул HP гэж нэрлэдэг одууд. SELECT...DO нь таны асуулгын бүх бичлэгийг давтахгүй.
SUSPEND командыг ашиглахыг зааж өгөх шаардлагатай бөгөөд ингэснээр зөвхөн хадгалагдах процедурыг хадгалах, EXIT командыг ашиглах, ингэснээр мөрийг шилжүүлсний дараа процедурыг хадгалах болно. Гэсэн хэдий ч EXIT командыг бөглөх нь ховор байдаг, чипүүд нь голчлон оюун ухаанд хүрэх мөчлөгийг тасалдуулахад шаардлагатай байдаг.
Буцах тохиолдолд процедурыг SELECT мэдэгдлээр дуудаж, EXIT-ээр дуусгасан бол үлдсэн мөрийг эргүүлэхгүй. Тобто, хэрэв та процедурыг тасалдуулж, эгнээнд орох шаардлагатай бол дарааллыг хурдасгах хэрэгтэй.

ТУСГАЛАХ;
ГАРАХ;

EXIT-ийн гол онцлог нь EXECUTE PROCEDURE-ээр дамжуулан товчлол дахь эргэлдэх параметрүүдийг синглтон багц өгөгдлийг сонгох явдал юм. Энэ тохиолдолд гадаад параметрийн утгуудыг тохируулсан боловч SQL мэдээллийн цуглуулга үүсэхгүй бөгөөд процедур дуусна.
Ээж нь энэ логикийг нэг дор ойлгохын тулд процедурынхаа текстийг дахин бичье.

ЖУРАМ ҮҮСГЭХҮнийг нэмэгдүүлэх (
Хувь 2 Давхар нарийвчлалыг нэмэгдүүлэх)
БУЦАХ (ID БҮХЭЛ, НЭР VARCHAR(80),
шинэ_үнэ ДАВХАР НАРИЙН) АС
Хувьсах дундаж үнэ ДАВХАР НЯГТАЙ ЗАРЛАХ;
ЭХЛЭХ
AVG СОНГОХ(үнэ_л)
Хүснэгтээс_Жишээ
INTO: дундаж_үнэ;
ТӨЛӨӨ
СОНГОХ ID, NAME, PRICE_1
Хүснэгтээс_Жишээ
INTO:ID, :NAME, :new_price
ХИЙХ
ЭХЛЭХ
/*энд бид арьсны бичлэгийг боловсруулдаг*/
ХЭРВЭЭ (new_pnce > дундаж_үнэ) ТЭГВЭЛ /*тиймээс одоогийн үнэ дундаж үнээс өндөр байна*/
ЭХЛЭХ
/*дундаж үнэтэй тэнцэх шинэ үнэ тогтоох, нэмээд хэдэн зуугаар нь тогтоох */
шинэ_үнэ = (дундаж_үнэ + дундаж_үнэ*(2 хувь/100));
ШИНЭЧЛЭХ Хүснэгт_жишээ
ҮНЭ_1 ТОХИРУУЛАХ = :шинэ_үнэ
ХААНА ID =: ID;
ТӨГСГӨЛ
ӨӨР
ЭХЛЭХ
/* Хэрэв бодит үнэ нь дундаж үнээс бага эсвэл илүү байвал би үнийг нийт үнэд тэнцүүлэн, үнийн дүнгээс дундаж үнийн хооронд жижиглэнгийн үнийн талыг нэмж тооцно */
шинэ_үнэ = (шинэ_үнэ + ((дундаж_үнэ - шинэ_үнэ)/2));
ШИНЭЧЛЭХ Хүснэгт_жишээ
ҮНЭ_1 ТОХИРУУЛАХ = :шинэ_үнэ
ХААНА ID =: ID;
ТӨГСГӨЛ
ТУСГАЛАХ;
ТӨГСГӨЛ
ТӨГСГӨЛ

Хадгалсан журмын Данийн жишээ нь мови хадгалах журам, триггерүүдийн үндсэн бүтцийг боловсруулахыг харуулсан. Ихэнхдээ буруутгадаг зарим даалгавруудыг биелүүлэхийн тулд хадгалсан процедурыг засах арга замыг авч үзье.

Хадгалагдсан рекурсив процедурууд

Хадгалагдсан InterBase процедурууд рекурсив байж болно. Tse гэдэг нь хадгалсан процедурыг та өөрөө дуудаж болно гэсэн үг юм. 1000 хүртэл тэнцүү процедурыг хадгалахыг зөвшөөрдөг боловч сервер дээрх нөөцүүд эрт дуусч магадгүй тул HP-ийн хамгийн их хөрөнгө оруулалт багасах болно гэдгийг санах хэрэгтэй.
Хадгалагдсан хамгийн өргөн хүрээний процедуруудын нэг бол мэдээллийн санд хадгалагдсан модтой төстэй бүтцийг боловсруулах явдал юм. Мод нь ихэвчлэн агуулахын удирдлага, агуулах, боловсон хүчин болон бусад өргөн хүрээтэй нэмэлтүүдээр ялагддаг.
Эхний тэнцүү хөрөнгө оруулалтаас эхлээд ижил төрлийн бүх барааг хэрхэн сонгох талаар авч үзсэн журмын жишээг авч үзье.
Би даалгаврын мэдэгдэлд оръё: би ийм төрлийн шаталсан бүтэцтэй бараа авчирч болох уу:

Бараа
- Побутовагийн техник
- Хөргөгч
- Гурван танхимтай
-Хоёр танхимтай
- Нэг танхимтай
- Цэвэрлэх машин
- Босоо
- урд талын
- Сонгодог
- Вузки
- Компьютерийн технологи
....

Tsya бүтэц dovіdnika categorіy varіv_v май ээж g_lki raznoї glibini. мөн түүнчлэн цаг хугацааны явцад бий болно. Бидний эрхэм зорилго бол аливаа vuzla-аас эхлээд "нийтлэг нэрийн уншлага" -аас өдрийн төгсгөлийн бүх элементүүдийг сонгох явдал юм. Жишээлбэл, хэрэв бид "Пални машин" -ыг сонговол дараахь ангиллыг анхаарч үзэх хэрэгтэй.

Өргөх машинууд - Босоо
Урд талын машинууд - Урд талын сонгодог
Урд талын машинууд - Өндөр урд талын машинууд

Хүснэгтийн бүтэц нь барааны явцын талаархи мэдээллийг цуглуулахад чухал ач холбогдолтой юм. Би нэг хүснэгтэд мод зохион байгуулах схемийг хялбаршуулсан:

Хүснэгт үүсгэх GoodsTree
(ID_GOOD БҮХЭЛ ТОГТОЙ БУС,
ID_PARENT_GOOD БҮХЭЛ,
GOOD_NAME VARCHAR(80),
хязгаарлалт pkGooci үндсэн түлхүүр(ID_GOOD));

Бид нэг GoodsTree хүснэгтийг үүсгэдэг бөгөөд үүнд зөвхөн 3 талбар байдаг: ID_GOOD - боломжийн категорийн тодорхойлогч, ID_PARENT_GOOD - тухайн ангиллын танигч, GOOD_NAME - категорийн нэр. Энэ хүснэгтийн өгөгдлийн бүрэн бүтэн байдлыг хангахын тулд бид үүнийг дуудлагын түлхүүр солилцох хүснэгтэд оруулав.

ALTER TABLE GoodsTree
FK_goodstree ХЯЗГААР НЭМЭГДҮҮЛЭХ
ГАДААД ТҮЛХҮҮР (ID_PARENT_GOOD)
ХЭРЭГЛЭХ АВЛАГА GOODSTEE (ID_GOOD)

Хүснэгт нь өөрөө өөрийгөө дэмждэг бөгөөд хуучин түлхүүрийг дагаж мөрдөх ёстой. үл мэдэгдэх аавууд дээр ширээний buv posilan дээр schob, і navіt reshkodzhaє бараа, yakі mayut nashchadki ангиллыг харж үзээрэй.
Үүнийг удахгүй гарах өгөгдлийн хүснэгтэд оруулъя:

ID_GOOD

1
2
3
4
5
6
7
8
9
10
11
12

ID_PARENT_GOOD

0
1
1
2
2
4
4
4
5
5
10
10

САЙН НЭР

БАРАА
Побутовын техник
Компьютер ба дагалдах хэрэгсэл
Хөргөгч
Цэвэрлэгээний машинууд
Тричамбер
Хоёр танхимтай
Нэг танхимтай
Босоо
Урд талын
Вузки
сонгодог

Одоо, хэрэв бидэнд мэдээлэл цуглуулах газар байгаа бол бид бүх "үлдэгдэл" ангиллын барааг "галдсан" ангиллаас, жишээлбэл, "Гурван" ангилалаас хасах хэмнэлтийн горимыг бий болгож болно. -chamber" ангиллын гаднах " Pobutov tehnіka Refrigerators Trikamernі " шиг харагдах болно.
Модтой төстэй бүтцийг арчлах журам нь өөрсдийн нэр томъёог боловсруулсан. Модны арьсны элементийг зангилаа гэж нэрлэдэг; мөн зангилааны завсар нэг нэгээр нь бөөгнөрсөн хөхийг өвгөний гутал гэнэ. Модны хамгийн төгсгөлд байрладаг, naschadkiv хийдэггүй Vuzli нь "навч" гэж нэрлэгддэг.
Хадгалах процедур бүрийн хувьд оролтын параметр нь категорийн тодорхойлогч байх тул ямар нэг шалтгааны улмаас бид эрэмбэлэх болно. Matime процедурыг дараах байдлаар хадгална.

GETFULLNAME (ID_GOOD2SHOW БҮХЭЛ Тоо) ЖУРАМ ҮҮСГЭХ
БУЦАХ (FULL_GOODS_NAME VARCHAR(1000),
ID_CHILD_GOOD БҮХЭЛ тоо)
AS
CURR_CHILD_NAME ХУВСАГЧИЙГ ЗАРЛАХ VARCHAR(80);
ЭХЛЭХ
/*ID_GOOD=ID_GOOD2SHOW бүхий bezporednіmi бүтээгдэхүүний шошгоны СОНГОХ ЗОВНЫ 0rgan_zuєmo zovnіshnіy мөчлөг */
Gtl.id_good, gtl.good_name СОНГОХ
GoodsTree gtl-с
WHERE gtl.id_parent_good=:ID_good2show
INTO:ID_CHILD_GOOD, :бүтэн_барааны_нэр
ХИЙХ
ЭХЛЭХ
/"Нэмэлт EXISTS функц байгаа эсэхийг шалгаж байгаа тул гараа эргүүлэхэд нэг эгнээ авах мэт ҮНЭН гэж эргүүлнэ үү. Хэрэв олдсон ID_PARENT_GOOD = ID_CHILD_GOOD цэгт товчлол байхгүй бол энэ нь модны "навч" бөгөөд үр дүн */
ХЭРЭВ (БИШ БАЙХГҮЙ()
GoodsTree-с * СОНГОХ
ХААНА GoodsTree.id_parent_good=:id_child_сайн))
ТЭГВЭЛ
ЭХЛЭХ
/* Модны нумыг үр дүнд хүргэх */
ТУСГАЛАХ;
ТӨГСГӨЛ
ӨӨР
/* хоншоор хийх гэх мэт зангилааны хувьд */
ЭХЛЭХ
//
CURR_CHILD_NAME=бүтэн_барааны_нэр;
/* миний процедурыг рекурсив байдлаар ажиллуул */
ТӨЛӨӨ
СОНГОХ_ХҮҮХДИЙН_САЙН,барааны_бүтэн_нэр
GETFULLNAME-аас(:ID_CHILD_GOOD)
INTO:ID_CHILD_GOOD, :бүтэн_барааны_нэр
ЭХЛЭЭРЭЙ
/*мэдэгдэж байгаа нэгэнд vuzla-аавын хувьд dodaєmo. */
бүтэн_барааны_нэр=CURR_CHILD_NAME| " " | f бүх_барааны_нэр,-
ТУСГАЛАХ; /* бараа эргүүлэх*/
ТӨГСГӨЛ
ТӨГСГӨЛ
ТӨГСГӨЛ
ТӨГСГӨЛ

Хэрэв бид энэ процедурыг ID_GOOD2SHOW=1 оролтын параметрээр ашиглавал дараах зүйлийг авна.

Яг л бахит шиг, аврагдсан рекурсив процедурын тусламжтайгаар бид категорийн модыг бүхэлд нь гүйлгэж, ангиллын нэрсийг - "навч" -ыг зүүний үзүүр дээр байгаа мэт гаргаж ирэв.

Висновок

Энэ мөчид бид миний хадгалсан процедурын үндсэн боломжуудын тоймыг дуусгаж байна. Мэдээжийн хэрэг, нэг хэсгийг уншихад хадгалагдсан процедурын задаргааг эзэмшихийн тулд бид хадгалах журамтай холбоотой үндсэн ойлголтуудыг нээж, тайлбарлахыг хичээсэн. HP-ийн дизайн, дизайны тодорхойлолтыг ихэнх мэдээллийн сангаас олж болно
Хадгалсан процедурын өртөгтэй холбоотой чухал хоол хүнсний нэг хэсгийг "Интербааз процедурыг хэмнэх боломжийг өргөжүүлэх" гэсэн дараагийн хэсэгт харуулах болно, учир нь энэ нь ерөнхий буруутай, өршөөлийн нөхцөл байдлын vir_ishennu холбоотой юм. хадгалсан журмууд болон роботууд.

Энэ мөчлөгийн урд хэсэгт хүснэгтээс өгөгдөл гаргаж авах, бүтцийг нь өөрчлөх, тэдгээрийн дотор нуугдаж буй өгөгдлийн сан, объектуудыг үүсгэх, өөрчлөх, харах боломжтой болохыг дэлхий нийтээр харав. Энэ нийтлэлд бид серверийн DBMS-ийн ердийн объектуудын талаар илүү дэлгэрэнгүй ярих болно: мэдэгдэл, триггер, хадгалагдсан процедур.

Манай сэтгүүлийн №3'2000-д нийтлэгдсэн энэхүү мөчлөгийн эхний нийтлэлд бид одоогийн серверийн DBMS-ийн ихэнх нь хадгалагдсан мэдэгдэл, триггер, процедурыг дэмждэг болохыг дурдсан. Мөн гадаад төрхийг bugatma DBMS дэмждэг, жишээ нь Access, dBase, Clipper.

Хадгалагдсан триггер болон процедурыг SQL хэлний процедурын өргөтгөл болох програмчлалын хэлээр бичих ёстойг зааж өгнө үү. Өргөтгөсөн мэдэгдлүүд нь алгоритмуудыг тайлбарлах боломжийг танд олгоно, жишээ нь: do...хэрэв, хэрэв...тэгвэл...өөрөөр бол SQL хэлэнд ашигладаг. vіdmіnu MTIE SQL, scho pіdporyadkovuєtsya стандарт Yogo protsedurnі rozshirennya nіyak үгүй биш standartizovanі Од, би өөрсдийгөө algoritmіchnih konstruktsіy, айргаа чимээгүй тулд өгөгдлийн сангийн vikoristovuyut rіznі sintaksichnі konstruktsії realіzatsії rіznі tsієї stattі цааш тохиролцсон rіznih vihodit нь vіdmіnnostey-д sintaksisі rozshiren SQL мэдээллийн сан.

Хадгалсан харагдах байдал, триггер, процедурыг хэрхэн яаж эргүүлэх боломжтойг харуулахын тулд бид Microsoft SQL Server 7.0 болон DBMS-ийн хүргэх багцын өмнө багтсан NorthWind мэдээллийн санг сонгосон.

Юуны өмнө DBMS-д ялалт байгуулсан триггер, процедурыг хэрэгжүүлэгч, хадгалсан хүмүүст хүндэтгэл үзүүлэх, эдгээр статистикийг зааж өгсөн гэж үзэж болно. Нэмж дурдахад, серверийн объектуудыг бий болгохын тулд мэдээллийн сангийн администраторыг өгсөн мэт дараах эхийг зөвшөөрдөг.

Зарим ODBC драйверууд үйлчлүүлэгчийн нэмэлтээс хадгалагдсан процедурын циклийг дэмждэггүй нь бас чухал боловч DBMS өөрөө үүнийг дэмждэг. Хадгалсан процедурыг аль болох эрт, өдөөгч хүчин зүйлээс арилгаж болно.

Баримтуудыг харцгаая, дараа нь хадгалагдсан процедурын талаар ярилцаж, өдөөгчийг хараад дуусгая.

Гадаад төрх

Оруулсан - tse виртуал хүснэгт, хүснэгтийн тоо аль нэг баганын тоог дуугарч. Бодит өгөгдөл байхгүй, зөвхөн SELECT төрлийн SQL асуулга байдаг бөгөөд эхний дүрслэл рүү буцахдаа ижил өгөгдөл, аль хүснэгтээс авах шаардлагатайг харуулдаг. Z tsієї цэг zoru yavlennya - tse асуух, scho zberіgaєtsya.

Ихэнх випадкивууд мэдээллийн аюулгүй байдлын төлөө ялалт байгуулдаг. Жишээ нь, coristuvachiv ангиллын диконууд гарч ирэхээс өмнө хандаж болно, гэхдээ хүснэгтэд биш, тэд өгөгдөл үүсгэж болно; Нэмж дурдахад, SQL-хүсэлт нь USER параметрийг (нэр, аль дор бүртгэгдсэн koristuvach) тохируулж болох бөгөөд энэ тохиолдолд огноо руу буцаж ирэхэд байгаа өгөгдөл нь koristuvach нэрийн дор унах болно.

Илэрхийллийн үндсэн шинж чанаруудыг доор харуулав.

  • yavlennya ширээ шиг биеэ авч явах;
  • өгөгдлийн өшөөг авахгүй байх нь илэрсэн;
  • Илгээлтүүд нь ижил хүснэгтээс илүү их мэдээлэл авах боломжтой.

Гадаад төрхийг бий болгохын тулд бид CREATE VIEW SQL-ийн саналыг өөрчилж, ALTER VIEW саналаар өөрчилж, DROP VIEW саналаар устгаж болно.

Strining өгөгдлийн сангийн харагдац үүсгэх боломжийг олгодог CREATE VIEW мэдэгдлийг харцгаая.

ҮЗҮҮЛЭХ саналыг бий болгох

Мэдэгдэл үүсгэх саналын синтакс нь хэд хэдэн нэмэлт түлхүүр үг бүхий SQL SELECT саналыг таамаглаж байна. Доорх нь энгийн синтакс юм:

ҮЗҮҮЛЭХ ҮЗҮҮЛЭХ_НЭРИЙГ сонгох_мэдэгдэл болгон үүсгэнэ үү

View_name аргумент нь харагдацын нэрийг зааж өгдөг. Microsoft SQL Server-д таарсан түлхүүр үг нь CREATE VIEW саналын эх бичвэрийг syscomments хүснэгтэд хавсаргах боломжийг олгоно.

AS түлхүүр үг нь мэдүүлэхээс өмнө буцаах үед аль SELECT асуулга хэрэгжиж болохыг заана. Хүсэлт нь ORDER BY, COMPUTE эсвэл COMPUTE BY, INTO гэсэн түлхүүр үгсийг орлуулах боломжгүй бөгөөд цагийн хүснэгтэд хамаарах боломжгүйг анхаарна уу.

Өмнө нь үүсгэсэн мэдэгдлийг өөрчлөхийн тулд доромжилсон хэсэгт тайлбарласны дагуу ALTER VIEW саналыг дагаж мөрдөөрэй.

DROP VIEW саналыг

vydalannya vyavlennya з да nih нь Tsya санал vikoristovuєtsya. Өгөгдлийн сангаас хүснэгтүүдийг харахад та түүнд хамаарах бүх мэдэгдлийг харж болно. Vikoristovuyuchi tsyu санал, бид im'ya vyavlennya, scho үзсэн гэм буруутай. Үзсэний дараа шинийн талаарх бүх мэдээллийг системийн хүснэгтээс харж болно.

Дахиад нэг зүйл хэлэхэд, хэрэв та үүнийг харах шаардлагатай бол уг үзэгдлийг үүсгэсний дараа түүний үндэслэсэн хүснэгтүүдийн бүтэц өөрчлөгдсөн гэж та үүнийг буруутгаж болно. Та энэ харагдацаас vistava-г харж, дараа нь CREATE VIEW нэмэлт саналд зориулж дахин үүсгэж болно.

Бүтээл ба vikoristannya илрэл

CREATE VIEW санал нь дуучдад өгөх гэж байгаа мэт өгөгдлийг өөрчлөх боломжийг олгодог мэдэгдэл үүсгэхэд ашиглагддаг. Илтгэлийг одоогийн мэдээллийн санд үүсгэсэн бөгөөд объект болгон цуглуулдаг.

Гадаад төрхийг бий болгох хамгийн сайн арга бол SELECT асуулга үүсгэх бөгөөд үүнийг буруу тайлбарласны дараа CREATE VIEW саналын дутуу хэсгийг нэмэх явдал юм. NorthWind мэдээллийн санд (Жагсаалт 1) Бүтээгдэхүүний категорийн мэдэгдлийн гаралтын текстийг харцгаая.

Тод үсгээр бичсэн эхний эгнээнд SQL-ийн саналыг SELECT мэдэгдлийг бий болгоход ашигладаг бөгөөд энэ нь өгөгдөл сонгоход роботыг ялдаг. Энэ өгөгдөлд хэрэглэх СОНГОХ заалт нь CATEGORIES хүснэгтээс CategoryName талбар болон PRODUCTS хүснэгтээс ProductName, QuantityPerUnit, UnitsInStock, Continued талбаруудыг гэсэн хоёр хүснэгтээс талбаруудыг сонгоно. Хэрэв энэ өгөгдөл өгөгдсөн бол хоёр хүснэгтийг CategoryID талбараар холбож, зөвхөн нөөцөд байгаа бүтээгдэхүүнүүд (WHERE түлхүүр үгийн дараа хуваагдах шалгуур) үүссэн өгөгдлийн багцад багтана. Эхний мэдүүлэг рүү буцах үр дүнг Зураг дээр үзүүлэв. нэг .

Одоо ижил төстэй бүс нутгийн бүх нутаг дэвсгэрийг харуулсан мэт мэдэгдэл хийцгээе. Танилцуулгын зорилго нь халдлагаас гарах явдал юм (Жагсаалт 2).

СОНГОХ санал нь үр дүнг хүссэнээрээ эргүүлдэг гэсэн асуудалд төөрөлдсөний дараа бид CREATE VIEW мэдэгдлийг нэмж, үүсгэсэн EASTTERR нэрийг нэмнэ (Жагсаалт 3).

Гараар илгээсэн текст үүсгэхийн оронд та DBMS агуулахад орохын тулд харааны хэрэгслийг ашиглаж болно. Зураг дээр. 2-р зурагт Microsoft SQL серверийн өмнө ирдэг Enterprise Manager-ийн агуулахын хэсэг болох View Designer нэмэлт хэрэгслийн ард ижил программыг хэрхэн үүсгэж болохыг харуулж байна.

View Designer-ийн дээд хэсэг нь хүснэгтүүдийг хэрхэн холбож, өгөгдөлд аль талбарыг харуулахыг зааж өгөх боломжийг олгодог. Доор та хуурамч нэр бүхий хүснэгт, талбар, тэдгээрийн утгыг орлуулах, харуулах аргыг оруулж болно. Дали мэдэгдлийн эцсийн текст болон yogo vikonannya үр дүнг тавьсан.

Эхлээд би эргэн тойрноо товчхон харцгаая, бид тэдгээрийн талаар бага зэрэг ярих болно, тэдгээрийн талаар нэмэлт мэдээллийг хэрхэн авах талаар ярилцъя. Microsoft SQL Server 7.0 дээр бид хадгалсан дараах системийн процедурыг өөрчлөх боломжтой.

  • Өргөдлийн талаарх мэдээллийг авахын тулд та sp_help системийн процедурыг ашиглаж болно. Жишээ нь, sp_help EastTerr нь үйл явдлын талаар нөхцөл байдлыг эргүүлэх;
  • оролтын текстийг засварлахын тулд та хадгалагдсан sp_helptext процедурыг өөрчлөх боломжтой;
  • Дүрслэл хадгалах хүснэгтүүдийн жагсаалтыг мэдэхийн тулд та sp_depends системийн процедурыг ашиглаж болно;
  • мэдэгдлийн нэрийг өөрчлөхийн тулд та хадгалагдсан sp_rename системийн процедурыг өөрчилж болно.

Бид хэнийг хуваасан, өгөгдлийг устгах нотлох баримтыг хэрхэн олж авах, эдгээр болон бусад шалгуурыг хэрхэн хангах талаар авч үзсэн. Өгзөгний үлдсэн хэсэг рүү эргэцгээе. NorthWind мэдээллийн санд хэд хэдэн бүс нутаг байдаг бөгөөд сонгосон бүс нутгийн нутаг дэвсгэрийн жагсаалтыг сонгохын тулд бидэнд хэд хэдэн өөр мэдэгдэл хэрэгтэй болно. Даалгаврыг уучилж болно, yakbee RegionID утгыг параметр болгон дамжуулж болно. Нэмэлт журамд ажиллах боломжтой, юуг анхаарах вэ, энэ талаар бид довтолгооны хэлтэст ярих болно.

Хадгалах журам

Хадгалагдсан процедур нь SQL-ийн саналуудын багцыг эмхэтгэх, мэдээллийн санд хадгалах объектыг нэрлэх, нэг кодын фрагмент болгон холбох явдал юм. Хадгалах журам нь параметрүүдийг хүлээн авч, эргүүлэх боломжтой. Хэрэв та хадгалагдсан процедурыг үүсгэвэл сервер үүнийг эмхэтгэж, тараагдсан кэшэд байрлуулж, дараа нь эмхэтгэлийн кодыг decals-ээр хааж болно. Хэрэв програм нь хадгалах процедурыг давж чадвал шаардлагатай параметрүүдийг дамжуулж, сервер дахин эмхэтгэлгүйгээр процедурыг ялна.

Хадгалах журам нь програмын бүтээмжийг нэмэгдүүлэх боломжийг олгодог. Эхний ээлжинд үйлчлүүлэгчийн программуудаар дарагдсан SQL-хүсэлт ихтэй, өмхий үнэр нь дуусахаас өмнө бэлтгэхэд нэг цаг хүрэхгүй хугацаа шаардагддаг, өмхий үнэрийг аль хэдийн эмхэтгэж хадгалдаг. Нөгөөтэйгүүр, урсгал багасч, SQL асуулга дамжуулах үед багасч, линкээр дамжуулагдсан өгөгдөл багасдаг. Цагаан будаа. Үйлчлүүлэгчийн хавсралтаар авсан долоо хоног тутмын 3 жишээ журам.

Хадгалах журам автоматаар дахин эмхэтгэсэн байна, объекттой юм шиг, тэдэнд өмхий үнэр цутгаж, zrobleno be-yaki өөрчлөлт; іnakshe kazhuchi, өмхий завжди бодит. Дээр дурдсанчлан, хадгалсан журмууд нь өөр өөр нэмэлтүүд нь ижил процедурыг ялах, оролтын өгөгдлийн янз бүрийн багцыг zastosovuyuchi боломжийг олгодог параметрүүдийг авч болно.

Мэдээллийн бүрэн бүтэн байдал, бизнесийн дүрмийг хэрэгжүүлэхэд дэмжлэг үзүүлэхийн тулд хадгаламжийн горимыг шаарддаг. Заримдаа dodatkova уян хатан байдал, хэлтэрхийнүүд байдаг тул бизнесийн дүрэм өөрчлөгдөхөд үйлчлүүлэгчийн нэмэлтийг өөрчлөхгүйгээр процедурын текстийг өөрчилж болно.

Процедурыг үүсгэх, өөрчлөх, өөрчлөхийн тулд тусгай SQL саналуудыг ашиглана уу - CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE. Бид тэднийг довтолгооны хэсэгт хардаг.

Санал ЖУРАМ БҮРДҮҮЛЭХ

Хадгалах процедурыг үүсгэхийн тулд CREATE PROCEDURE заалтыг сонгосон. Доромжилсон задлан шинжлэлийн синтакс байж болно:

PROC proc_name CREATE [(@parameter data_type) [= default] ] [...] AS sql_statements

proc_name аргумент нь процедурын нэрийг тохируулдаг бөгөөд хэрэв энэ нь thread мэдээллийн санд өвөрмөц байж чадвал үүнийг хадгалах боломжтой. @parameter аргумент нь процедурын параметрийг тодорхойлдог. CREATE PROCEDURE заалт нь нэг буюу хэд хэдэн параметртэй байж болно. Хэдийгээр урамшууллын параметрийн утга байхгүй ч долоо хоног бүрийн журмын дагуу сурвалжлагч (эсвэл үйлчлүүлэгчийн нэмэлт) шилжүүлэг байж болно. Microsoft SQL Server 7.0-д авсан процедурын параметрүүдийн тоо нь 1024-ийг хүчингүй болгоход хариуцлага хүлээхгүй; umovchannyam өмхий үнэр mozhut ээж znachennya NULL нь.

Өгөгдөлд хандах ийм түгээмэл механизм нь хадгалагдсан процедурын параметрүүдийн тоонд нэмэлт хязгаарлалт тавьж болох нь чухал юм. Жишээлбэл, Oracle 8-д зориулсан BDE драйвер нь зөвхөн процедуруудтай ажиллахад зориулагдсан бөгөөд параметрийн тоо нь 10 өөрчлөгддөггүй.

Өгөгдлийн_төрлийн аргумент нь параметрийн өгөгдлийн төрлийг тодорхойлдог. Өгөгдмөл түлхүүр үг нь урамшууллын ард утгыг тохируулахад ашиглагдаж болно - энэ нь тогтмол эсвэл NULL байж болно. Түгжээнд утгыг зааж өгсөн тохиолдолд параметрийн утгагүйгээр процедурыг орхиж болно. Үүний нэгэн адил процедур нь LIKE түлхүүр үг бүхий параметрийг ашигладаг бөгөөд сурталчилгааны утгыг бүлгийн тэмдэгтүүдээр (%, _, ба [^]) сольж болно.

OUTPUT түлхүүр үг нь аль параметрийг эргүүлэхийг заана.

AS түлхүүр үг нь энэ серверт хамаарах SQL процедурын өргөтгөл дээр хэдэн SQL санал болон санал байгааг харах хооронд зөрчил гаргахад процедур буруутайг харуулж байна.

Нэмэлт CREATE PROCEDURE заалтад зориулан үүсгэсэн процедурыг урсгал мэдээллийн сангаас хадгалах болно. Microsoft SQL Server дээр процедурын нэрийг sysobjects системийн хүснэгтэд, гаралтын текстийг syscomments хүснэгтэд байрлуулна.

Өмнө нь хийсэн зүйлийг өөрчлөхийн тулд дараагийн хэсэгт товч тайлбарласан ALTER PROCEDURE саналд ялахын тулд дараах процедурыг сонгосон.

Санал УНАХ ЖУРАМ

Мэдээллийн сангаас авсан алсын журмын хувьд Tsya санал vikoristovuetsya. DROP PROCEDURE санал нь нэг аргументыг авдаг бөгөөд энэ нь харагдах процедурын нэр юм.

Хадгалсан процедурыг устгахдаа тэдгээрийн талаарх мэдээллийг системийн хүснэгтээс sysobjects болон syscomments устгадаг.

Хадгалагдсан сонгосон процедурыг бий болгох

Үйл явдалд томилогдсон салбар дээр бид хэрэг болохуйц зүйлсийг хүндэтгэсэн тул NorthWind мэдээллийн баазын дөрвөн бүсээс аль нэгийг сонгохдоо RegionID утгыг орлуулах параметрийг танилцуулга руу шилжүүлж болно. Нутаг дэвсгэрийн жагсаалтыг бүс болгон хувиргадаг үүнийг дахин харцгаая.

Нутаг дэвсгэрээс сонгон нутаг дэвсгэр.TerritoryDescription, Region.RegionTarif.

Өөр бүсийг сонгохын тулд бид үлдсэн эгнээний WHERE заалтын санааг өөрчлөх хэрэгтэй. Мөн бид өөрчилсөн тул (RegID гэж нэрлэдэг) элсэлтийн бусад хэсгийг өөрчлөхгүйгээр дөрвөн бүсээс аль нэгийг сонгох боломжтой.

NorthWind мэдээллийн сан нь 1-ээс 4 хүртэлх тоотой хэд хэдэн бүстэй. Энэ нь RegID-г бүхэлд нь өөрчлөх боломжтой гэсэн үг юм. Хийх процедурын кодыг доор харуулав.

ЖУРАМ ҮЗҮҮЛЭХ ShowRegion @RegID int Нутаг дэвсгэр.TerritoryDescription, Region.RegionDescription FROM Territories.Territories.TerritoryDescription, Region.RegionDescription.

СОНГОХ хүсэлтийн текстийг бүхэлд нь хассан байж болзошгүй хүмүүст талархал илэрхийлье (бусад эгнээнд) болон түлхүүр үг AS, scho vkazuє cob саналууд, үнэхээр vykonuyut diї.

RegID = 2 уншилтын хувьд үүсгэсэн SQL Server Query Analyzer процедурын үр дүн Зураг дээр. 3 .

Мэдээжийн хэрэг, бид хадгалагдаж байгаа процедурыг зөвхөн илрэлийн өргөтгөсөн хувилбаруудыг хэрэгжүүлэхэд төдийгүй "оюуны" SELECT хүсэлтийг хадгалах боломжтой. Хадгалах журам нь ердийн олон ажлыг автоматжуулах боломжийг олгодог механизмуудыг өгдөг.

Microsoft SQL Server 7.0-ийн тусламжтайгаар бид систем хэмнэх горимуудыг өөрчилж, хадгалагдсан хамгийн чухал процедуруудтай ажиллах боломжтой.

  • sp_stored_procedures - хадгалах процедурын жагсаалтыг харуулах;
  • sp_helptext - хадгалах процедурын текстийг харуулах;
  • sp_depends - хадгалах процедурын хуучирсан байдлын талаарх мэдээллийг харуулах;
  • sp_procoption - хадгалагдсан эсвэл тохируулсан процедурын сонголтыг тохируулах;
  • sp_recompile - дараагийн долоо хоногт процедурыг дахин эмхэтгэх;
  • sp_rename – процедурын нэрийг өөрчлөх.

Хадгалсан системийн процедурууд

Бид Microsoft SQL Server-ийн тухай ярьж байгаа боловч түүний хадгалсан, хэрэгжүүлсэн олон тооны системийн процедурыг хэлж байна. Хадгалсан системийн процедурын нэр нь SP_ эсвэл XP_-ээс эхэлж, үндсэн мэдээллийн санд хадгалагдана. Илүү олон удаа, бид аль хэдийн аврагдах нь ихэвчлэн ялалт системийн журмын үйлсийг тодорхойлсон байна.

хүндэтгэл илчлэх, гох нь coristuvachev өгөгдлийг эргүүлэх буруугүй гэдгийг.

CREATE TRIGGER санал нь хоёр тусгай хүснэгттэй байж болно. Жишээлбэл, устгасан болон оруулсан хүснэгтүүд нь хүснэгттэй ижил бүтэцтэй байж, түүнд триггер оноож, өөрчлөгдсөн бичлэгийн хуучин болон шинэ утгыг устгаж болно. Жишээлбэл, бид алсын бичлэгийг хайхын тулд дараах SQL саналыг мушгин гуйвуулж болно:

SELECT * FROM устгагдсан

Ширээн дээр Зураг 3-т бүх боломжит өгөгдлийн өөрчлөлтийн устгасан болон оруулсан хүснэгтүүдийг харуулав.

Илэрхий триггерийг өөрчлөхийн тулд ALTER TRIGGER гэсэн саналыг дагана уу. Довтолгооны дивизионд нэг шинэ зүйлийн талаар ярилцъя.

Кобын хувьд бид хүснэгтэд хоёр шинэ талбар нэмэх шаардлагатай бөгөөд тэдгээрийн тоог багасгах болно. Тухайлбал їх UpdatedBy (бичлэгийг зогсоосон менежерийн нэр) ба UpdatedWhen (бичлэг өөрчлөгдсөн цаг). KeepTrack нэртэй триггер үүсгэцгээе. йогийн тэнхлэгийн код:

ҮЗҮҮЛЭГЧ ҮҮСГЭХ KeepTrack ON Хэрэглэгчид INSERT, ШИНЭЧЛЭХ Хэрэглэгчийн SET Customers.UpdatedBy = USER_NAME(), Customers.UpdatedWhen = GETDATE() FROM оруулсан, Хэрэглэгчид ХААНА оруулсан.CustomerID = Customers.CustomerID

Триггерийн гаралтын текстээс харахад вин нь Customers хүснэгт дээрх INSERT болон UPDATE арьсны үйлдлүүдийн дараа шалгагдсан байна. Энэ триггер нь Customers.UpdatedBy талбараас менежерийн нэрийг (өгөгдлийн сан) хадгалах ба Customers.UpdatedWhen талбараас огноо, цагийг өөрчилнө. Өгөгдлийн тоог цагийн хүснэгтээс хассан, танилцуулсан.

Бачимогийн нэгэн адил энэ гох нь өөрчлөлтийг дагаж, хүснэгтэд шинэ бичлэг оруулах боломжийг олгодог.

Үүнээс өмнө триггерүүдийн талаар товчхон харж дуусгах талаар бид буруутай тул триггерүүдийн талаарх мэдээллийг мэдэж болно. Sysobjects хүснэгтэд триггер болон төрлүүдийн талаарх мэдээллийг, syscomments хүснэгтэд тэдгээрийн гаралтын текстийг хадгалдаг.

Висновок

Энэ хэсэгт бид хэд хэдэн төрлийн мэдээллийн сангийн объектуудыг авч үзсэн - процедур, илрүүлэлт, хадгалагдсан триггер. Бид урьдчилгааг таньсан:

  • Гадаад төрх - tse виртуал хүснэгт, нэг тооны хүснэгтэд баганын дэд хэсэг болгон үүсгэсэн дуу чимээ. Харагдах байдал үүсгэхийн тулд CREATE VIEW саналыг, өөрчлөхийн тулд ALTER VIEW саналыг, устгахын тулд DROP VIEW саналыг ашиглана.
  • Хадгалагдсан процедур нь SQL-ийн саналуудын багцыг эмхэтгэх, мэдээллийн санд хадгалах объектыг нэрлэх, нэг кодын фрагмент болгон холбох явдал юм. Хадгалсан процедурыг үүсгэхийн тулд CREATE PROCEDURE гэсэн саналыг тохируулж, өөрчлөх бол - ALTER PROCEDURE, устгах бол - DOP PROCEDURE.
  • Триггер нь SQL-ийн нэмэлт INSERT, DELETE эсвэл UPDATE саналд зориулж нэг хүснэгтэд байгаа өгөгдөл нэмэгдэх, харагдах эсвэл өөрчлөгдсөн тохиолдолд автоматаар дуудагддаг тул хадгалагддаг тусгай төрлийн процедур юм. Триггерийг CREATE TRIGGER заалтын тусламжтайгаар үүсгэсэн. Триггерийг өөрчлөхийн тулд ALTER TRIGGER саналыг сонгож, DROP TRIGGER саналыг хасна.

ComputerPress 12"2000

SQL процедурыг хадгалах - өөр өөр объектуудыг харахаас аварч болох програмын модулийг хакердах. Өөрөөр хэлбэл, SQL-заавартай объект. Хадгалсан процедурыг програмын үйлчлүүлэгчдэд сайн бүтээмжид хүрэхийн тулд ашиглаж болно. Нэмж дурдахад, ийм объектуудыг ихэвчлэн бусад хувилбараас эсвэл өөр төрлийн хуваарилалтыг урамшуулахын тулд дууддаг.

Нэвтрэх

Бусад процедуртай (жишээлбэл, MS SQL) төстэй гэдгийг хэн ч мэдэх нь чухал юм. Магадгүй, чиний зөв. Тэд ижил төстэй параметртэй байж болно, тэд ижил төстэй утгыг харж болно. Тэдгээрийн дээгүүр өмхий үнэр нь нэг цагийн турш наалддаг. Жишээлбэл, өмхий үнэр нь DDL болон DML мэдээллийн сан, түүнчлэн үндсэн функцуудтай (кодын нэр - UDF) холбоотой байдаг.

Үнэн хэрэгтээ, анхаарал хандуулж байгаа SQL процедурууд нь ийм процессуудын дунд хэсгийг олж хардаг тул өргөн хүрээний давуу талтай байдаг. Bezpeka, програмчлалын хувьсах чадвар, бүтээмж - бүгд өгөгдлийн сангаас ажилладаг цөмд илүү их мэдээлэл өгдөг. Процедурын алдартай оргил үе нь 2005-2010 онуудад, хэрэв програм нь "Microsoft" нэрээр SQL Server Management Studio нэрээр гарсан бол унасан. Мэдээллийн сангийн тусламжтайгаар энэ нь илүү хялбар, илүү практик, илүү тохиромжтой болсон. Дэлхий дээрх рокоос програмистуудын дунд ийм алдартай болж байна. Өнөөдөр энэ нь користувачивын хувьд мэдээллийн сантай "холбох" шиг, "Exel" шиг болсон шиг үнэхээр сайн програм юм.

Хэрэв та процедур дээр дарвал энэ нь vtruchannya coristuvacha гэсэн zayvih protsessіvгүйгээр сервер өөрөө шууд боловсруулагддаг. Хэрэв тийм бол та алс хол, vikonannya, өөрчлөлт шиг байх zdiyasnyuvati болно. Энэ бүхний хувьд танд объектын боловсруулалтын хамгийн төвөгтэй хэсгүүдийг дээрэмдэхийг өөрөө заадаг DDL-оператор хэрэгтэй. Түүнээс гадна, энэ нь маш хурдан юм шиг санагддаг, сервер нь үнэндээ navantazhuetsya биш юм. Энэ төрлийн хурд, бүтээмж нь серверээс сервер рүү их хэмжээний мэдээллийг хялбархан дамжуулах боломжийг олгодог.

Энэхүү технологийг хэрэгжүүлэхийн тулд мэдээлэл бүхий роботууд нь mov програмчлал дээр суурилдаг. Тэдний өмнө та жишээ нь Oracle шиг PL / SQL, InterBase болон Firebird систем дэх PSQL, мөн сонгодог "Microsoft" Transact-SQL-ийг харж болно. Гайхалтай мэдээллийн сан дахь алгоритмуудыг эзэмших боломжийг олгодог хадгалагдсан процедурыг үүсгэж, дуусгахад бүх өмхий үнэрийг хүлээн зөвшөөрдөг. Ийм мэдээллийг удирдаж буй хүмүүс бүх объектыг гуравдагч этгээдийн системд зөвшөөрөлгүй нэвтрэхээс хамгаалж, бусад өгөгдлийг үүсгэх, өөрчлөх, үзэх боломжтой байх шаардлагатай.

Бүтээмж

Qi мэдээллийн сангийн объектуудыг өөр өөр замаар програмчилж болно. Tse нь coristuvachas-д ялгуусан аргын төрлийг сонгох боломжийг олгодог бөгөөд энэ нь хамгийн тохиромжтой байх бөгөөд энэ нь тухайн цагийн хүчийг хэмнэх болно. Нэмж дурдахад, процедурыг өөрөө боловсруулж байгаа бөгөөд энэ нь сервер болон серверийн хооронд цагийн гайхалтай ханшийг нуух боломжийг олгодог. Мөн модулийг хүссэн үедээ дахин програмчилж, өөрчлөх боломжтой. Ялангуяа, хадгалсан SQL процедурыг эхлүүлэхээр хүлээгдэж буй уян хатан байдлыг тэмдэглэх нь зүйтэй: энэ үйл явц нь бусадтай илүү төстэй, үүнтэй төстэй бөгөөд үүнийг үр ашигтай, бүх нийтийн болгох боломжтой юм.

Безпека

Энэ төрлийн мэдээллийн боловсруулалтыг ижил төстэй процессуудад ашигладаг бөгөөд энэ нь аюулгүй байдлыг сайжруулдаг. журамд бусдын хандалт дахин унтрааж болно дансны хувьд Tse bezpechuetsya. Мэдээллийн хэт их ачаалал, мэдээллийн санд зөвшөөрөлгүй нэвтрэхээс айхгүйгээр администраторт тэдэнтэй бие даан үйл ажиллагаа явуулах боломжийг олгох.

Өгөгдөл дамжуулах

Авсан SQL процедур ба үйлчлүүлэгчийн нэмэлт хоёрын хоорондох холболт нь өөр өөр параметр, утгууд дээр тулгуурладаг. Мэдээллийг (голчлон эрэлт хэрэгцээнд) боловсруулж, SQL-д зориулж боловсруулдаг, хадгалсан процедурт өгөгдөл дамжуулахыг бүү зөвшөөр. Хадгалагдсан процедур нь ажлаа дуусгасан тул нэмэлт мэдээлэлд буцаж ирсэн өгөгдлийн багцууд (алдаа, би мэднэ) байгаа бөгөөд ингэснээр та йог, ялалтын аргуудыг ашиглаж болно. SQL процедурыг хэрхэн хадгалах талаар олж мэдээрэй, жишээлбэл:

Нэмэлт параметрийн өгөгдлийг Гаралтын төрөлд дамжуулах;

Операторын тусламж авахын тулд өгөгдөл дамжуулах;

Сонголт хийхэд операторын туслалцаа үзүүлэх хүндэтгэлийн хүч.

Тэгээд одоо бүх үйл явцыг дундуур нь харж байгаа юм шиг харцгаая.

1. SQL дээр EXEC Хадгалсан Процедурыг үүсгэх

Та MS SQL (Managment Studio) дээр процедур үүсгэж болно. Процедурыг үүсгэсний дараа үүнийг оператор үүсгэсэн үндсэн өгөгдлийн програмчлалаас чөлөөлнө. vykonannya SQL журмын хувьд scho zberіgayutsya, vykoristovuyut EXEC-үйл явц, KAKI m_sti ыm'ya объект нь өөрөө.

Процедурыг нэгтгэх үед эхлээд нэрийг зарлаж, дараа нь танд өгсөн нэг буюу хэд хэдэн параметрийг сонгоно. Параметрүүд нь заавал байх албагүй байж болно. Процедурын үндсэн параметрүүдийг бичих тул шаардлагатай үйлдлүүдийг хийх шаардлагатай.

Баруун талд, биеийг орон нутгийн хэмжээнд өөрчлөх боломжтой, nіy-д roztashovani, мөн tsі нь процедурын өмнөх огнооны дагуу орон нутгийн хэмжээнд өөрчлөгдөж болно. Өөрөөр хэлбэл, тэдгээр нь зөвхөн Microsoft SQL Server процедурын үндсэн хэсгийн дунд харагдах болно. Хадгаламжийн журам заримдаа орон нутгийн vvazhayutsya байна.

Тиймээс процедурыг бий болгохын тулд процедурын нэр болон процедурын үндсэн хэсэгт дор хаяж нэг параметр байх шаардлагатай. Ийм цаг үеийн хамгийн чухал сонголт бол ангилагч дээр схемийн нэрийн журмыг бий болгох явдал гэдгийг анхаарч үзээрэй.

Процедурын үндсэн хэсэг нь хүснэгт үүсгэх, хүснэгтэд нэг эсвэл мөр оруулах, өгөгдлийн сангийн төрөл, шинж чанар гэх мэт зарим төрлийн жишээ байж болно. Процедурын протео бие нь шинэ нэг дэх одоогийн үйл ажиллагааны ялалтуудын хооронд байна. Чухал хязгаарлалтын актуудыг доор дурдсан болно.

Бие махбодь аврагдаж байгаа бусад процедурыг хийхэд буруугүй;

Бие махбодь нь тухайн объектын талаар өршөөлийг бий болгож чадна;

Бие махбодь өдөр тутмын өдөөгчийг бий болгоход буруугүй.

2. Процедурын биед өөрчлөлт оруулах

Та тэдгээрийг процедурын биед орон нутгийн байдлаар өөрчилж болох бөгөөд үнэр нь зөвхөн процедурын биеийн дунд хэсэгт л өөрчлөгдөнө. Сайн туршлага бол хэмнэлттэй, бие махбодид өөрчлөгддөг журмыг бий болгох явдал юм. Гэхдээ тухайн объектын биеийн аль ч хэсэгт өөрчлөлтийг суулгах боломжтой.

Зарим тохиолдолд та хэд хэдэн өөрчлөлтийг нэг эгнээнд суулгаж, өөрчлөлтийн параметрийн арьсыг усаар бэхжүүлсэн гэж хэлж болно. Мөн @ угтварыг өөрчлөх боломжтой гэдгээ хүндэтгэнэ үү. Процедурын төрлийг хүссэн газраа өөрчлөх боломжтой. Жишээ нь, @NAME1-г өөрчлөх нь процедурын төгсгөлд ойртуулж болно. Дуугүй өөрчлөлтийн утгыг өгөхийн тулд тусгай мэдээллийн багц цуглуулдаг. Нөхцөл байдлын үндсэн дээр нэг мөрөнд нэгээс олон өөрчлөлт гарсан бол ийм нөхцөлд нэгээс цөөн тооны тусгай өгөгдөл байдаг.

Ихэнх тохиолдолд асуулт хариултууд: "Процедурын гарчиг дахь нэг мэдэгдлийн жижиг утгыг та хэрхэн таних вэ?" За. Цикаваг тэжээх нь илүү хялбар байх болно, гэхдээ та тэгж бодохгүй байна. Зөвлөмж: "Select Var = value" гэх мэт ийм хосуудын тусламж. Та магадлалыг даван туулж, комагаар тарааж чадна.

Хамгийн manipulative өгзөг нь хүмүүс энгийн журам бий болгох харуулж байна, анхаарал халамж авч байгаа юу, мөн vikonannya її. Энэ процедурын хувьд та процесс, түүнийг юу гэж нэрлэдэг, утга нь шинэтэй ойрхон (гэхдээ үүнийг өөрчлөх хэрэггүй) зэрэг параметрүүдийг авч болно. Өмхий үнэр гарах тусам биеийн голд процессууд эхэлдэг. Жишээ нь, процедурыг хэрхэн бий болгох, тухайн бүс нутгийн байршлыг захиалагчаас хэрхэн хүлээн авах, юу дуудах, тэдгээрийн талаархи өгөгдлийг эргүүлэх, тухайн бүс нутгийн байршил руу хэдэн зохиогч илгээгддэг. Уг процедур нь мэдээллийн баазын зохиогчдын хүснэгтийг, жишээлбэл, пабуудын жагсаалтыг зохиогчдын жагсаалтын төгсгөл хүртэл харгалзан үзнэ. Өгөгдлийн санг харахын тулд, жишээлбэл, Google нь SQL2005-ийн талаас SQL скриптийг авдаг.

Эхний тохиолдолд процедур нь англиар @State болон @City гэсэн хоёр параметрийг авна. Өгөгдлийн төрөл нь нэмэлтэд томилогдсон төрөлтэй тохирч байна. Процедурын гарчгийг @TotalAuthors (бүх зохиогчдын) дотооддоо өөрчилж болох бөгөөд тэдгээрийн тоо хэмжээг харуулах зорилгоор өөрчлөх болно. Dalі z'yavlyaєtsya razdіl vyboru zaputu, yakii бүх pіdrakhovuє. Nareshti, podrahovane znachennya vіdobrazhaєєtsya vіknі vyvodu найздаа операторын туслалцаа үзүүлэх.

SQL Viconati ашиглан процедурыг хэрхэн хадгалах вэ

Процедурыг дагаж мөрдөх хоёр арга бий. Процедурын нэрний дараа хуваагдлын жагсаалтыг харуулсан тул параметрүүдийг дамжуулж эхний замыг харуулав. Энэ нь зөвшөөрөгдөх боломжтой, бид хоёр утгатай байж болно (урд өгзөг шиг). @State болон @City журмын нэмэлт өөрчлөлтийн параметрүүдэд утгыг авна. Параметрүүдийг шилжүүлэх бүх арга зам нь чухал дарааллаар хэнд байна. Энэ аргыг ordinal argument passing гэж нэрлэдэг. Нөгөө талаар, параметрүүдийг хоёрдмол утгагүй хүлээн зөвшөөрдөг бөгөөд ийм байдлаар дараалал нь чухал биш юм. Үүнийг хийх өөр нэг арга бол нэрлэсэн аргументуудыг дамжуулах явдал юм.

Процедурыг стандарт болгон өөрчилж болно. Тиймээс энэ нь урд талын өгзөг шиг явдаг, гэхдээ зөвхөн параметрүүдийг энд харуулав. Тиймээс эхлээд @City параметрийг авч, цоожны утгуудаас @State-г авна. Түгжээний ард байгаа параметр нь зүгээр юм шиг сонсогдоно. Хадгалсан SQL процедурыг энгийн параметр болгон дамжуулдаг. Энэ тохиолдолд UT параметр нь SA түгжээний утгыг дарж байгааг анхаарна уу. Нөгөө vicoon нь @ City параметрийн нэгээс олон аргументын утгатай бөгөөд @ State параметр нь CA түлхүүрийн утгыг авдаг. Хөтөлбөрийн шинэчлэлтүүд баяртай байх болно, ингэснээр товчлолын өөрчлөлтүүд параметрийн жагсаалтын төгсгөлд шинэчлэгдэх болно. Өөрөөр хэлбэл, бид үүнийг хийж чадахгүй, тэр ч байтугай та илүү сайн, эвхэгддэг аргументуудыг нэрлэх дадлага хийхдээ буруутай.

4. SQL серверийн процедурыг хадгалах: Эргүүлэх арга замууд

Хадгалагдсан барьцааны журмын дагуу өгөгдлийг удирдах гурван чухал арга байдаг. Өмхий үнэрийг дараах байдлаар нөхөн сэргээнэ.

Хийж буй процедурын утгыг эргүүлэх;

Хадгалагдаж буй процедурын параметрийг хасах;

Хадгалсан процедуруудын аль нэгийг сонгоно уу.

4.1 SQL процедурыг хадгалах утгыг өөрчлөх

Энэ аргын хувьд процедур нь орон нутгийн өөрчлөлтийн утгыг өгч, түүнийг эргүүлнэ. Процедурыг цаг алдалгүй эргүүлж болно. Довтолж буй өгзөг дээр тэд олон тооны зохиолчдыг эргүүлж байгаа мэт процедурыг бий болгосон. Хэрэв та энэ процедурыг өмнөхтэй харьцуулбал нөгөөгийнх нь утгыг буцаах гэсэн үгээр сольсон гэж бодож болно.

Одоо яаж процедурыг дагаж мөрдөж, утгыг нь оруулах, хэрхэн эргүүлэх талаар бодож үзье. Vikonannya журам vmagaє vstanovlennya zminnoї тэр найз, сарлагийн үйл явцын дараа явуулж болно. Та Select операторыг, жишээ нь Select @RetValue болон OutputValue-г орлуулж болно гэдгийг анхаарна уу.

4.2 Хадгалсан SQL процедурын параметрүүдийг устгах

vіdpovіd утга нь бид болон урд өгзөг нь bachiled нь нэг zminnoy эргүүлэх нь vikoristane байж болно. Гаралтын параметрийн хувилбар нь нөгөө талын өөрчлөлтийн утгыг аль нэгийг нь засах боломжийг процедурт олгодог. Процедурыг үүсгэх үед гаралтын параметрийг "Output" гэсэн ижил түлхүүр үгээр тодорхойлно. Хэрэв ажлын параметр нь гаралтын параметр бол процедурын объект нь түүний утгыг тохируулах үүрэгтэй. Хадгалах SQL процедурыг бага зэрэг ашиглаж болно, өөр өөр тохиолдолд дэд багийн мэдээллийн хамт ашигладаг.

Манай програм @ TotalAuthors болон @ TotalNoContract гэсэн хоёр албан ёсны нэртэй байх болно. Өмхий үнэрийг параметрийн жагсаалтаар зааж өгсөн болно. Qi zminnі нь процедурын биеийн дунд хэсгийн утгыг өгдөг. Хэрэв бид параметрүүдийг ялах юм бол захиалагч процедурын гол хэсэгт оруулсан утгыг сонгох боломжтой.

Үүнээс гадна өмнөх хувилбарт MS SQL Server процедурыг гаралтын параметрт хадгалж байгаа мэт утгыг нэмэгдүүлэхийн тулд хоёр өөрчлөлт хийсэн. Дараа нь процедурыг CA параметрийн хэвийн утгыг тохируулах замаар зоддог. Дараагийн параметрүүд нь адилхан бөгөөд дараа нь дуугүй өөрчлөлтүүдийг дарааллаар нь дамжуулдаг. Өөрчлөгдсөн өдрүүдийн өнгөрч буй цаг нь түлхүүр үг гэдгийг энд бас өгч байгааг анзаараарай. Процедур амжилттай болсны дараа сүүлийн параметрүүдийн нэмэлт тусламж авахын тулд тэдний ач холбогдлыг цаашид нэгтгэхэд харуулав.

4.3 Хадгалах SQL процедурын аль нэгийг сонгоно уу

Энэ техникийг өгөгдлийн хүснэгтийн утгуудын багцыг (RecordSet) авсан бүх процедур руу эргүүлэхэд ашигладаг. Энэхүү програмын хувьд @AuthID параметр бүхий хадгалагдаж байгаа SQL процедур нь шүүлтүүрийн зам бүхий "Зохиогчид" хүснэгтийг тэжээж, нэмэлт @AuthId параметрийн дараа бичлэгүүдийг эргүүлнэ. Select хэллэг нь эргүүлж болох зүйлийг дарж, сонгох процедурыг дууддаг. Процедур амжилтгүй болсны дараа AuthId-г буцааж дамжуулна. Ийм журам энд үргэлж зөвхөн нэг бичлэгийг эргүүлдэг, эс тэгвээс энэ нь зайлшгүй шаардлагатай. Але, авч байгаа процедур нь өдөр бүр нэгээс илүү бичлэгийг эргүүлэхийг зөвшөөрдөггүй. Өөрчлөлтийн тооцооллын оролцоотойгоор өөр өөр параметр бүхий өгөгдлийн зарим эргэлтийн жишээг ашиглах нь ихэвчлэн боломжтой байдаг бөгөөд хэд хэдэн багийн утгыг өгөх арга байдаг.

Төгсгөлд нь

Хадгалж буй процедур нь ноцтой програм хангамжийн модулийг дуусгах бөгөөд үүнийг эргүүлж эсвэл дамжуулж, мөн үйлчлүүлэгчийн нэмэлт өөрчлөлтөд шаардлагатай өөрчлөлтүүдийг суулгадаг. Хадгалагдсан Oskіlki журам, сервер дээр өөрөө vikonuєtsya, сервер болон үйлчлүүлэгчийн нэмэлт (тэдгээр хасагдах) хооронд их үүрэг өгөгдөл солилцох устгаж болно. Энэ нь танд SQL сервер рүү шилжих боломжийг олгодог бөгөөд энэ нь захирагчдын гарт орох нь ойлгомжтой. Урьдчилан таамаглаж болох нэг зүйл бол чухал мэдээллийн санг бий болгоход оролцдог хүмүүсийн хариуцдаг T SQL процедур юм. Түүнчлэн, маш олон тооны нюансууд байдаг бөгөөд тэдгээр нь хадгалагдсан процедурыг гүйцэтгэхэд өөр байж болох бөгөөд энэ нь програмчлалын чиглэлээр, тэр дундаа мэргэжлийн чиглэлээр ажиллахаар төлөвлөж буй хүмүүст илүү их шаардлагатай байдаг.