Vіdminnіst vіd vіd журам, scho zberіgaєtsya. DROP VIEW саналыг. Зайлсхийх ёстой функцүүдийн үл тэвчих байдал

Процедурыг хадгалж байнахадгалагдсан процедур) - мэдээллийн сангийн програмын объектыг нэрлэх. SQL Server нь хадгалагдсан декал төрлийн процедуруудтай.

Хадгалсан системийн процедуруудсистемийн хадгалагдсан процедур) нь DBMS-ийн жижиглэн худалдаачид нийлүүлдэг бөгөөд системийн каталог эсвэл системийн мэдээллээс хайж олох зорилгоор ангилдаг. Тэдний нэр "sp_" угтвараас эхэлдэг. Хадгалсан бүх төрлийн процедурыг EXECUTE командын тусламжтайгаар эхлүүлсэн тул та EXEC руу богиносгож болно. Жишээлбэл, параметргүйгээр эхлүүлсэн sp_helplogins процедур нь үүлэн оруулгын нэрсийн талаар хоёр дуудлага үүсгэдэг. (Англи.нэвтрэх) (Англи.хэрэглэгчид).

EXEC sp_helplogins;

Shchob diy тухай мэдэгдэл өнөөг хүртэл, Хүснэгтэнд хадгалагдаж байгаа нэмэлт системийн журмын хувьд scho vykonuyutsya. 10.6 тавьж deyaki өгзөг. SQL Server-д хадгалагдсан мянга гаруй системийн процедурууд байдаг.

Хүснэгт 10.6

SQL серверийн системийн процедурыг ашиглах

Koristuvachevi боломжтой бий болгох хадгалах журам coristuvac DBs болон DBs timchasovye объект. Үлдсэн өдөр нь авсан журам нь болно тимчасова.Тиймээс, timchasov хүснэгтүүдтэй vipadku-д хадгалагдсан timchasov процедурыг нэрлэхийн нэгэн адил орон нутгийн timchasov процедурыг бүхэлд нь хадгалсан тул "#" угтвараар эхлэх нь буруутай боловч "##" -ээр ийм байна. дэлхийн. Орон нутгийн timchasov процедурыг зөвхөн бий болсон өдрийн хүрээнд хийж болно, дэлхийн нэг нь бусад салбарт бас байдаг.

SQL Server объектуудыг програмчлах нь Transact-SQL-ийн тусламж болон сонголтын тусламжтай ажиллах боломжтой. (Англи. assembly) Microsoft.Net Framework-ийн CRL (Common Language Runtime) орчинд. Энэ туслахыг харах нь зөвхөн эхний арга юм.

Хадгалсан процедурыг үүсгэхийн тулд CREATE PROCEDURE хэллэгийг ашигладаг (та үүнийг PROC болгон богиносгож болно), форматыг доор харуулав.

CREATE(PROC I PROCEDURE) proc_name[; тоо]

[(gparameter data_type)

[“өгөгдмөл] |

[ХАМТ [ ,...n ] ]

[ ХОЛБООТОЙ ]

AS ([BEGIN]sql_statement[;][...n][END])

Үүний нэгэн адил, хадгалагдаж байгаа процедур (эсвэл гох, функц, харагдац) нь ШИЛДВЭРЛЭХ сонголтоор үүсгэгддэг тул текстийг унших боломжгүй болгох үүднээс кодыг дахин бичдэг. Үүний зэрэгцээ, SQL Server-ийн өмнөх хувилбаруудаас зөөвөрлөх алгоритмыг дээд зэргийн алгоритм гэж үзэх боломжгүй бөгөөд портын алгоритмыг буцаах боломжийг олгодог хэрэгслүүд дээр суурилдаг.

ДАХИН ЭРГҮҮЛЭХ сонголт нь арьс сорох процедурын үед систем текстийг дахин эмхэтгэх болно гэдгийг харуулж байна. Гайхалтай нь, процедурыг анх эхлүүлэхэд эмхэтгэж, кэшэд хадгалдаг бөгөөд энэ нь кодыг хадгалах боломжийг олгодог.

EXECUTE AS Процедуртай байж болох хамгаалалтын контекстийг тохируулна. f CALLER | утгуудын аль нэгийг өгнө үү ӨӨРӨӨ | ЭЗЭН | "хэрэглэгчийн_нэр"). CALLER гэдэг нь сурталчилгааны цаадах утга бөгөөд уг кодыг модулийг дуудаж буй хамгаалалтын кодын хүрээнд сонгоно гэсэн үг юм. Мэдээжийн хэрэг, эх нь зөвхөн програмчлалын объект дээр төдийгүй бусад мэдээллийн сангийн объектууд дээр баригдсан coristuvach буруутай юм. ӨӨРИЙГӨӨ ГҮЙЦЭТГЭХ гэдэг нь програмчлалын объектыг үүсгэх эсвэл өөрчилдөг спикерийн контекстээс хамаарна гэсэн үг. OWNER нь кодыг процедурын хэлхээний менежерийн контекстэд оруулахыг зааж өгдөг. Хэрэв түүний төлөө власник томилогдоогүй бол тэр схемийн vlasnik дээр хэвтэж, харааж зүхдэг. "хэрэглэгчийн_нэр"-ээр ГҮЙЦЭТГЭХ нь танд користувачийн нэрийг тодорхой зааж өгөх боломжийг олгодог (ганц сарвуугаар).

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

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

PROC surma (@a int, @b int=0,

©result int OUTPUT) AS

SET @result=0a+0b

Бид гурван параметр бүхий процедурыг үүсгэсэн бөгөөд үүнээс гадна @b параметр нь түгжих утгатай = 0, @ үр дүн гарч байна: утгыг дуудсан програм руу шинийг эргүүлнэ. Дия, юу хожих вэ, үүнийг хялбархан хий - гаралтын параметр нь хоёр оролтын нийлбэрийн утгыг авдаг.

SQL Server Management Studio дээр ажиллаж байхдаа би хадгалагдсан процедурыг үүсгэсэн бөгөөд та үүнийг мэдээллийн сангийн програмчлалын хэсгээс олох боломжтой. (Англи.Программчлах чадвар) хадгалсан процедурын хаалтанд (Зураг 10.2).

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

Цагаан будаа. 10.2.

@3 int;

EXEC нийлбэр 10.5, @OUTPUT;

PRINT0c; - 15-ыг харуулах болно

ЗАРЛАХ Gi int = 5;

- zamovchuvannyam нь viklik vikoristovuєmo үнэ цэнийн цаг дор

EXEC summa Gi, DEFAULT, 0s OUTPUT;

PRINT0c; – 5 гарч ирнэ

Одоо процедур дуусгавар болох эргэлтийн кодыг шинжлэх замаар жишээг харцгаая. Чамайг баярлуулахыг зөвшөөрнө үү, олон жилийн туршид үзсэн Bookl of books. Хэрэв тийм бол cob rіk нь kontsevy-ээс том харагдаж, процедурыг "1" болгож, пидракунок хийгдээгүй, өөрөөр хэлбэл - номын тоо мөн өөрчлөгдөж, номын тоо 0 болж хувирна:

CREATE PROC dbo.rownum(0FirsYear int, GLastYear int, 0result int OUTPUT) AS

ХЭРВЭЭ 0FirsYear>0 Өнгөрсөн жил БУЦАХ 1

SET @result= (dbo.Bookl-аас COUNT(*) СОНГОХ

0 эхний жилээс өнгөрсөн жилийн 0 ХООРОНД) ;

Энэ процедурын нэг хувилбарыг авч үзье, үүнд эргэлтийн кодыг бүхэлд нь өөрчлөлт 0ret болгон авч, дараа нь түүний утгыг шинжилнэ (энэ тохиолдолд энэ нь 1 болно). PRINT операторт ялсан CAST функц нь Gres бүхэл тоон хувьсагчийн утгыг мөрийн төрөлд хөрвүүлэхэд үйлчилнэ.

0ret int, Gres int

EXEC Gret = rownum 2004, 2002, Gres OUT;

ХЭРЭВ 0ret=l ХЭВЛЭХ

ХЭВЛЭХ "Номын тоо" + CAST(Gres as varchar(20))

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

Гэхдээ схем, функц, триггер, процедур, хадгалагдсан процедурыг үүсгэх боломжгүй.

Довтолгооны өгзөг нь харуулын объектын харагдах талбартай холбоотой чадвар, тэжээллэг байдлыг харуулдаг. Уг процедурыг доор өгөв, үүнийг авсан, цагийн хүснэгт # Tab2 байгаа эсэхийг дахин баталгаажуулах; Хэрэв хүснэгт байхгүй бол би тэдгээрийг үүсгэдэг. # Tab2 хүснэгтийн дараа хоёр баганын утгыг оруулах бөгөөд хүснэгтийн оронд SELECT мэдэгдлээр харагдана.

PROC ҮҮСГЭХ My_Procl (@id int, @name varchar(30))

ХЭРЭВ OBJECT_ID("tempdb.dbo.#Tab21) ҮНЭГҮЙ БОЛ

dbo-д INSERT INSERT.#Tab2 (id, name)VALUES (0id,0name)

dbo-оос * СОНГОХ. #Таб2-#1

Процедурын эхний долоо хоногоос өмнө бид дараагийн цагийн хүснэгтэд # Tab2 оруулна. ЄХES операторыг хүндэтгэ. Урд талын өгзөгний хувьд параметрүүдийг "байрлалаар" горимд шилжүүлсэн бөгөөд энэ тохиолдолд параметрүүдийг шилжүүлэх өөр формат - "нэрээр" -ийг тухайн утгын параметрийн нэрээр тодорхой зааж өгсөн болно.

dbo Хүснэгтийг үүсгэх. # Tab2(id int, нэр varchar(30));

EXEC My_Procl 0name="lvan", 0id=2;

dbo-оос * СОНГОХ. # таб2; -#2

Зогсоосон өгзөгний хувьд SELECT мэдэгдэл нь хоёртын файлуудыг өөрчилдөг: эхний удаад - процедурын дунд, хоёр дахь нь - дуудаж буй кодын фрагментээс ("No 2" гэсэн тайлбараар томилогдсон).

Процедурын өөр нэг викигийн өмнө бид цагийн хүснэгтийг # Tab2-г харсан. Дараа нь авсан процедураас нэг цагийн хүснэгт үүсгэгдэнэ.

DROP TABLE dbo. # таб2;

EXEC My_Procl 0name="Иван", 0id=2;

dbo-оос * СОНГОХ. # таб2; -#2

Энэ тохиолдолд би зөвхөн процедурын дунд байрлах SELECT мэдэгдлийг өгсөн ("Ха 1" тайлбартай). SELECT "No. 2" оруулга нь хадгалагдсан журамд үүсгэгдсэн тул өршөөлд аваачлаа. Процедураас буцах үед цагийн хүснэгт tempdb мэдээллийн сангаас аль хэдийн устгагдах болно.

Процедурыг DROP PROCEDURE операторын тусламжтайгаар харж болно. Його форматыг доор харуулав. Нэг операторын тусламжтайгаар та хэн нэгнээр дамжуулан амилуулах замаар хадгалсан хэд хэдэн процедурыг харж болно:

DROP (PROC I PROCEDURE) ( процедур ) [

Жишээлбэл, би хураангуй журмыг өмнө нь үүсгэсэн бололтой:

DROP PROC нийлбэр;

Та ALTER PROCEDURE операторын (нэмэлт) тусламжтайгаар үндсэн процедурт өөрчлөлт оруулах боломжтой (мөн үнэндээ - її-г дахин оноох)

уурын хурд PROC). ALTER түлхүүр үгээс гадна мэдэгдлийн формат нь CREATE PROCEDURE форматаас бараг өөр юм. Жишээлбэл, бид dbo процедурыг өөрчилдөг. rownum, түрүүчийн аюулгүй байдлын хүрээнд viscon сонголтыг тохируулах:

ALTER PROC dbo.rownum(SFirsYear int,

SLastYear int, Sresult int OUTPUT)

WITH EXECUTE AS Owner - суулгах сонголт

ХЭРВЭЭ 0FirsYear>0Өнгөрсөн жил БУЦАХ 1 НЬ ӨӨР ЭХЭЛЛЭЭ

SET 0үр дүн= (dbo.Bookl-аас COUNT(*) СОНГОХ

SFirsYear болон SastYear ХООРОНД ХААНА);

Зарим тохиолдолд та өгөгдлийн сангийн сервер дээр динамик хэвлэх команд болон viconann її хэрэгцээг батлах шаардлагатай байж болно. Tse zavdannya мөн ЄХES операторын туслалцааг шалгаж болно. Хулганы доод өгзөгт Bookl хүснэгтээс сонгогдсон бичлэгүүдийг Year шинж чанарын оюуны тэгш байдлын хувьд сонгосон бөгөөд энэ утгыг өөрчлөхөөр тохируулсан болно:

ЗАРЛАХ 0y int = 2000;

EXEC("СОНГОХ * FROM dbo.Bookl WHERE = " [имэйлээр хамгаалагдсан]) ;

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

Урд өгзөгийг солих:

ЗАРЛАХ 0y varchar(100);

SET 0y = "2TOV"; - Цэ ми користувачаас салгав

SET мэдэгдэлд орсон мөрийн утгыг бид код болгон (ямар ч зэрэглэлээс үл хамааран, жишээ нь вэб хавсралтаар) авсан гэж үзвэл, жишээ нь манай кодын "ердийн" үйлдлийг харуулж байна.

ЗАРЛАХ 0y varchar(100);

SET 0y = "2000; dbo.Book2-с УСТГАХ"; - тарилга

EXEC("SELECT * FROM dbo.Book2 WHERE="+0y);

Боломжтой бол sp_executcsql системийн процедурыг ижил төстэй аргаар ашиглахыг зөвлөж байна, энэ нь SQL зам дээрх мөрүүдийн нэг болох параметрийн төрлийг хянах боломжийг олгодог. її форматын нарийн ширийнийг судлахгүйгээр өмнө нь танилцуулсантай төстэй зүйлийг харцгаая.

sp_executesql-г ГҮЙЦЭТГЭХ

N"SELECT * FROM dbo.Bookl WHERE = 0y",

Энд параметрийн төрлийг тодорхой зааж өгсөн бөгөөд энэ нь хүсэлтэд ялах бөгөөд өөрчлөлт гарсан тохиолдолд SQL серверийг удирдах болно. Сарвууны урд байрлах "N" үсэг нь уг тэмдэгт нь Юникод форматын тогтмол гэдгийг харуулж байгаа бөгөөд энэ нь процедурыг илэрхийлдэг. Параметрийг байнгын утга болгон өгч болох бөгөөд хоёр дахь утга нь өөр байна.

Мета робот– Мэдээллийн сангийн сервер дээр хадгалагдсан процедурыг хэрхэн үүсгэх, өөрчлөх талаар сурах.

1. Бүх програмуудыг ажиллуулах, тэдгээрийг SQL Server Management Studio хэрэглүүрт хэрэгжүүлсний үр дүнд дүн шинжилгээ хийх. Урсгалын мэдээллийн санд процедур байгаа эсэхийг дахин баталгаажуулах.

2. Лабораторийн ажлын явцад бүх програм, даалгавар Vikonannya.

3. Сонголтуудын хувьд хувь хүний ​​захиалга хайж байна.

Виконання роботын тайлбар

Хадгалагдсан процедурын програмчлалыг эзэмшихийн тулд бид өгөгдлийн сангийн нэр бүхий хэсгийг ашигладаг DB_Books, була шиг лабораторийн робот No1 бүтээсэн. Хэзээ vykonannі prikladіv гэж zavdan хүндэтгэн хүндэтгэх нэрсийн мэдээллийн сан, хүснэгт болон төслийн бусад объект.

Хадгалах журамЭдгээр нь нэг буюу хэд хэдэн SQL оператороос бүрдэх командуудын багц юмуу мэдээллийн санд нэг дор цуглардаг функцууд юм.

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

Захиргааны янз бүрийн үйл ажиллагаанд хяналт тавихад анхаарах ёстой системийн журмыг хүлээн зөвшөөрдөг. Серверийн удирдлагын бараг бүх даалгавруудыг тусламжид тооцдог. Системийн хүснэгтүүдтэй ажиллахыг баталгаажуулдаг интерфейсээр хадгалагдсан системийн процедурууд гэж хэлж болно. Хадгалсан системийн процедурууд нь sp_-ийн угтвартай байж болох бөгөөд системийн мэдээллийн санд хадгалагдаж, өөр ямар ч мэдээллийн сангийн контекстоор дуудаж болно.

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

Хадгалагдсан цагийн горимууд нь зөвхөн нэг цаг үргэлжилдэг бөгөөд үүний дараа сервер автоматаар багасгадаг. Өмхий үнэрийг орон нутагт болон дэлхийн хэмжээнд түгээдэг. Хадгалагдсан орон нутгийн timchasovy процедурыг зөвхөн тэр өдрөөс хойш ямар ч тохиолдолд эргүүлэн татах боломжтой. Ийм журмын цагт нэг тэмдэгтээс эхэлсэн нэр өгөх шаардлагатай #. Бүх цагны объектуудын нэгэн адил хадгалагдсан ижил төрлийн процедурууд серверийг асаах, дахин эхлүүлэх эсвэл сервер ажиллаж байх үед автоматаар устгагдана. Хадгалсан дэлхийн цаг хугацааны процедурыг ижил процедурыг ашигладаг серверийн аль ч өдөр ашиглах боломжтой. її томилохын тулд ## тэмдгээс эхэлдэг їy іm'ya өгөхөд хангалттай. ЦИ горимууд нь аль нэг серверийг дахин эхлүүлэх, түүнчлэн сесс хаагдах үед эвгүй үнэр үүссэнтэй холбоотой харагдана.

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

анхаарал халамж тавих журам бий болгох, дараагийн даалгавар шилжүүлэх: нэвтрэх эрхийг төлөвлөх. Хадгалсан процедурыг үүсгэх үед та өөрийн үүсгэсэн өгөгдлийн сангийн объектод хандах эрхгүй гэдгээ хамгаалах ёстой; процедурыг сонгох параметрийн сонголт, хадгалагдсан горимууд нь оролт, гаралтын параметрүүдийн эх байж болно; rozrobka журмын код, scho zberіgaetsya. Процедурын код нь хадгалагдсан бусад процедурыг эргүүлэн татах зэрэг аливаа SQL командын дарааллыг орлуулж болно.

MS SQL серверийн утгууд дээр шинэ эсвэл тодорхой горимыг өөрчлөх операторын синтакс:

( CREATE | ALTER ) PROC[ EDURE] procedure_name [ ;number] [ ( @parameter_name datatype ) [ VARYING ] [ = FAULT ] [ OUTPUT] ] [ ,... n] [ WITH ( ДАХИН ЭРГҮҮЛЭХ | ШИФРЛҮҮЛЭХ ХОЛБОО] AS sql_statement [ ... n]

Тушаалын параметрүүдийг харцгаая.

Vikoristovuyuchi угтвар sp_, #, ##, үүсгэсэн журам, систем эсвэл timchasova гэж оноож болно. Тушаалын синтаксаас харахад процедур шаардлагатай түрүүчийн нэр, мөн хаана байрлуулж болох мэдээллийн сангийн нэрийг зааж өгөхийг хориглоно. Тиймээс тодорхой мэдээллийн санд хадгалагдсан процедурыг үүсгэхийн тулд мэдээллийн сангийн контекст дээр CREATE PROCEDURE командыг бичих шаардлагатай. Процедурын үндсэн хэсгийн тусламжтайгаар өгөгдлийн санг зарлахаас өмнө товчилсон нэрийг сонгох боломжтой тул өгөгдлийн сангийн нэрийг зааж өгөхгүйгээр хийх боломжтой. Хэрэв та бусад мэдээллийн санд жагсаасан объект руу очих шаардлагатай бол мэдээллийн сангийн нэрийг obov'yazkovo оруулна уу.

Хадгалсан үүсгэсэн процедурт оролт, гаралтын өгөгдлийг шилжүүлэхийн тулд ашиглах параметрүүдийн нэр нь @ тэмдэгээр эхэлдэг. Сонгосон нэг процедурын хувьд та комагаар тусгаарлагдсан нэргүй параметрүүдийг тохируулж болно. Процедурын төрөл нь орон нутгийн өөрчлөлтөд буруугүй бөгөөд тэдгээрийн нэрийг процедурын параметрүүдийн нэрээр сонгосон байна. Процедурын өгөгдлийн параметрийн төрлийг тодорхойлохын тулд өгөгдлийн төрлүүд нь SQL, түүний дотор мөрүүд байх нь тохиромжтой. Гэхдээ CURSOR өгөгдлийн төрлийг зөвхөн нэмэлт горимын параметр болгон ашиглах боломжтой бөгөөд үүнийг анхаарч үзэх хэрэгтэй. OUTPUT түлхүүр үгийн даалгавараас.

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

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

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

Нийтлэлд нийтлэл болгон авсан өгөгдлийг хуулбарлах, үүсгэсэн процедурыг оруулах үед хүсэлтийн FOR REPLICATION параметр. ENCRYPTION түлхүүр үг нь Viconity серверт хадгалагдсан процедурын кодыг шифрлэх зааварчилгаа бөгөөд энэ нь робот хадгалагдсан процедурыг хэрэгжүүлдэг зохиогчийн эрхийн алгоритмын хамгаалалтыг хамгаалж чадна. Түлхүүр үг AS нь биеийн коб дээр байрлуулсан бөгөөд энэ нь процедурыг хэмнэдэг. Үүнтэй ижил процедурын дагуу бараг бүх SQL командыг царцааж, гүйлгээг дүлий болгож, блоклох болон хадгалагдсан бусад процедурыг дуудаж болно. Хадгалсан процедураас гарахыг RETURN командын тусламжтайгаар хийж болно.

авч байна Vidalennya журам

УНАХ ЖУРАМ ( процедурын_нэр) [ ,... n]

Vikonannya журмуудыг авдаг

Процедурыг ялахын тулд тушаал нь: [ [ EXEC [UTE] процедурын_нэр [ ;тоо] [ [ @parameter_name= ] (утга | @name_change) [ OUTPUT ] | [ өгөгдмөл ] ] [ ,...n]

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

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

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

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

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

Хадгалсан процедурын БУЦАХ холбоос

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

Books GO-с ТООЛОН_НОМЫГ СОНГОЖ ТООЛОХ (Код_ном) ЖУРАМ ҮҮСГЭХ

Даалгавар 1.

EXEC-н ном

Үр дүнг гажуудуулах.

Оролтын параметр бүхий процедур үүсгэх жишээ:

Count_Books_Pages @Count_pages ЖУРАМ ҮҮСГЭЭРЭЙ Хуудаснууд>= @Count_pages ЯВАХ НОМЫН СОНГОХ ТООН (Код_ном)

Менежер 2. SQL server Management Studio хэрэглүүрийг ашиглан DB_Books өгөгдлийн сангийн Stored Procedures салбарт энэ процедурыг үүсгэнэ үү. Тусламж авах командыг ажиллуулна уу

EXEC номын_тоо_хуудас 100

Үр дүнг гажуудуулах.

Оролтын параметр бүхий процедур үүсгэх жишээ:

ЖУРАМ ҮҮСГЭЭРЭЙ Count_Books_Title @Count_pages AS INT , @Title AS CHAR (10 ) AS СОНГОХ COUNT (Код_ном) FROM WHERE Pages>= @To_pages , Title_book LIKE @Title GO

Даалгавар 3. SQL server Management Studio хэрэглүүрийг ашиглан DB_Books өгөгдлийн сангийн Stored Procedures салбарт энэ процедурыг үүсгэнэ үү. Тусламж авах командыг ажиллуулна уу

EXEC Номын_тоо_гарчиг 100 "P%"

Үр дүнг гажуудуулах.

Оролтын параметрүүд болон гаралтын параметрүүдтэй процедур үүсгэх жишээ:

ЖУРАМ ҮҮСГЭХ Count_Books_Itogo @Count_pages INT , @Title CHAR (10 ) , @Itogo INT OUTPUT AS SELECT @Itogo = COUNT (Code_book) FROM WHERE Pages>= @Count_pages AND Title_book LIKE @Tit

Даалгавар 4. SQL server Management Studio хэрэглүүрийг ашиглан DB_Books өгөгдлийн сангийн Stored Procedures салбарт энэ процедурыг үүсгэнэ үү. Нэмэлт командын багцыг ажиллуулна уу:

Sql> @q-г int EXEC Count_Books_Itogo 100, "P%" гэж зарлах, @q гаралтыг сонгох @q

Үр дүнг гажуудуулах.

Оролтын параметрүүд болон RETURN бүхий процедурыг үүсгэх жишээ:

CREATE PROCEDURE checkname @param INT ГЭЖ БАЙНА (Нэр_зохиогчийн ХААНА зохиогчдоос СОНГОХ Code_author = @param) = "Пушкин А.С." 1-ийг БУЦАХ БУЦАХ 2

Даалгавар 5. SQL server Management Studio хэрэглүүрийг ашиглан DB_Books өгөгдлийн сангийн Stored Procedures салбарт энэ процедурыг үүсгэнэ үү. Нэмэлт тушаалуудыг ажиллуулахын тулд її:

@return_status МЭДЭГДЭХ INT EXEC @return_status = шалгах нэр 1 "Буцах төлөв"-ийг сонгох = @return_status

Худалдан авалтын хүснэгтийн түлхүүр талбарын утгыг 2 дахин нэмэгдүүлэхийн тулд параметргүй процедурыг үүсгэх жишээ:

PROC update_proc-г ШИНЭЧЛЭГДСЭН БОЛГООР худалдан авах SET Code_худалдан авалт = Код_худалдан авалт* 2

Даалгавар 6. SQL server Management Studio хэрэглүүрийг ашиглан DB_Books өгөгдлийн сангийн Stored Procedures салбарт энэ процедурыг үүсгэнэ үү. Тусламж авах командыг ажиллуулна уу

EXEC update_proc

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

PROC сонгох_author @k CHAR (30) ҮҮСГЭЭРЭЙ * Зохиогчид ХААНА нэр_author= @k СОНГОХ

Даалгавар 7.

EXEC select_author "Пушкин А.С." or select_author @k= "Пушкин А.С." эсвэл EXEC select_author @k= "Пушкин А.С."

Худалдан авалтын хүснэгт дэх түлхүүр талбарын утгыг өгөгдсөн тооны удаа (2 удаа түгжихэд) нэмэгдүүлэхийн тулд оролтын параметр ба түгжих утгууд бүхий процедур үүсгэх жишээ:

PROC ҮҮСГЭЖ update_proc @p INT = 2 ШИНЭЧЛЭГДСЭН Худалдан авалтууд SET Code_purchase = Code_purchase * @p

Уг процедур нь хүлээгдэж буй өгөгдлийг буцаахгүй.

Менежер 8. SQL server Management Studio хэрэглүүрийг ашиглан DB_Books өгөгдлийн сангийн Stored Procedures салбарт энэ процедурыг үүсгэнэ үү. Нэмэлт тушаалуудыг ажиллуулахын тулд її:

EXEC update_proc 4 эсвэл EXEC update_proc @p = 4 эсвэл EXEC update_proc --zastosovuєtsya урамшууллын үнэ цэнэ.

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

@d1 БА @d2 ХОТЫН ХООСОН огнооны захиалга @c = ISNULL(@,

Менежер 9. SQL server Management Studio хэрэглүүрийг ашиглан DB_Books өгөгдлийн сангийн Stored Procedures салбарт энэ процедурыг үүсгэнэ үү. Нэмэлт тушаалуудыг ажиллуулахын тулд її:

'01-6-р сарын 2006 ', '01- 7-р сарын 2006 ', @c2 OUTPUT SELECT @c2-д @c2 INT EXEC-ийн худалдан авалтын тоог МЭДЭГЛЭХ

4-р лабораторийн ажилд орох сонголтууд

Загалын байр суурь. SQL Server Management Studio хэрэглүүрт кодын шинэ хэсгийг үүсгэнэ үү ("Хүсэлт үүсгэх" товч). Use мэдэгдлийн тусламжтайгаар DB_Books идэвхтэй мэдээллийн санг программчлан үүсгэнэ. Нэмэлт үүсгэх процедурын мэдэгдлүүдийг хариуцах процедурыг үүсгэж, процедурын нэрийг дангаар нь зааж өгнө. Өөр нэг лабораторийн роботын vikonovation нь нэг SQL хүсэлт дээр арьс журам vikonuvatime. Үүнээс гадна SQL кодыг ийм байдлаар өөрчлөх шаардлагатай бөгөөд ингэснээр хайлт хэрхэн хийгдсэн талбаруудын утгыг шилжүүлэх боломжтой болно.

Жишээлбэл, 2-р лабораторийн роботын даргын гадна:

/*Шуудангийн ажилтны огноог сонгоно уу (Хүснэгт Хүргэлт) компаниудын нэр, телефон утас, IPN (Нэр_компани, Утас ба INN талбарууд), үүнд компанийн нэр (Нэр_компани) "BAT SVIT" байна.

Нэр_компани, утас, INN-ийг ХААНА хүргэлтээс СОНГОХ Нэр_компани = "BAT SVIT"

*/ –Энэ роботод зориулсан процедурыг үүсгэнэ:

Нэр_компани @comp CHAR (30 ) Нэр_компани, Утас, INN НЭР_КОМПАНИЙГ ХААНА хүргэлтээс СОНГОХ БОЛОВСРУУЛАХ Нэр_компани = @comp.

- Процедурыг эхлүүлэхийн тулд дараах тушаалыг өгнө.

EXEC "BAT SVIT" компанийг сонгох

Захирлуудын жагсаалт

SQL Server Management Studio дээр шинэ програм үүсгэ. Ашиглах операторын тусламжтай лабораторийн №1 роботод үүсгэсэн идэвхтэй хувь хүний ​​мэдээллийн санг программчлан үүсгэнэ. Нэмэлт үүсгэх процедурын мэдэгдлүүдийг хариуцах процедурыг үүсгэж, процедурын нэрийг дангаар нь зааж өгнө. Сонголтуудын дараагийн даалгаврын харагдах байдлыг харуулсан шиг нэг SQL хүсэлт дээр арьсны процедур vikonuvatime.

Сонголт 1

1. Spivrobitnikiv-ийн жагсаалтыг оруулна уу, yakі нэг хүүхэд хүсч болно.

2. Хугацааны төгсгөлд бэлэг харсан хүүхдүүдийн жагсаалтыг оруулна уу.

3. batkіv, yakі mayutnі inopnolіtnі хүүхдүүдийн жагсаалтыг оруулна уу.

4. Заасан тоо хэмжээнээс их хэмжээний бэлгийн талаарх мэдээллийг огноогоор нь ангилан оруулна.

Сонголт 2

1. Заасан төрлийн дагалдах хэрэгслийн жагсаалтыг оруулна уу.

2. Холбох хэрэгслийн засварын тоо, нийт засварын тоог томилогдсон мастерт мэдэгдэнэ.

3. Vlasniks-ийн жагсаалтыг холбох хэрэгсэл, малын тоо, малын тоо, хэрхэн унах талаар эрэмбэлэх.

4. Илүү томилогдсон дугаартай эсвэл заасан хугацаанаас бага ажилд хүлээн авсан огноотой ажлын талаарх мэдээллийг оруулна.

Сонголт 3

2. Заасан үнийн дүнгээс илүү үнээр өнгө зарагдсан борлуулалтын кодын жагсаалтыг оруулна уу.

3. Заасан борлуулалтын кодыг худалдсан огноо, үнийн дүн, худалдагч, тасалбарыг оруулна уу.

4. Тасалбарын жагсаалт болон заасан тооноос их буюу илүү гоёмсог тасалбарын үнэлгээг оруулна.

Сонголт 4

1. Зогсоохоос өмнө өгөгдсөн заалтуудаас шошгоны жагсаалтыг оруулна уу.

2. Хүргэлтийн огнооны жагсаалтыг оруулна уу, өгөгдсөн тооноос илүү ижил лигийн зарагдсан.

3. Хүргэлтийн огноо, хэмжээ, нийлүүлэгчийн дагуу захиалгын дугаарын PIB-г оруулаад би заасан тоо хэмжээнээс илүү хэрэгцээтэй байгаа кодны ард үсгийг нэрлэнэ.

Сонголт 5

2. Тодорхой шалтгаанаар хасагдсан эд хөрөнгийн жагсаалтыг оруулна.

3. Хугацаа дуусах огноог оруулна уу, би эзэмшиж, хасагдсан хугацааны дебитийн огнооны PIB-ийг нэрлэнэ.

4. Зориулалтын төрөл эсвэл өмчлөлийн огноо нь эхний үнэ цэнээс илүү байгаа өмчийн жагсаалтыг оруулна уу.

Сонголт 6

1. Заасан тооноос дээш даатгалын жагсаалтыг оруулна уу.

2. Бүтээгдэхүүний жагсаалтыг нэрэнд нь үгийн хэлтэрхийг оруулна уу.

3. Бүтээгдэхүүний нэрийг оруулах, мөрийг нэрлэх, эхний эцсийн утгын дараа заасан анхны утгаас мөрийн код бүхий бүтээгдэхүүнийг нэрлэнэ.

4. Дусаах бэлдмэлийг бэлтгэх дарааллыг оруулаад дусаахыг эхний утгаараа нүүрс усны тоогоор илүү, эсвэл заасан утгад илүү их калорийн тоогоор нэрлэнэ.

Сонголт 7

1. Томилогдсон тариалалтаас дадлагажигч нарын жагсаалтыг оруулна уу.

3. Тухайн үеийн томилгоонд бүртгүүлсэн баримт бичгүүдэд бүртгүүлсэн огноо, баримт бичгийн төрөл, бүртгэгчийн PIB, байгууллагын нэрийг оруулна.

4. Бүртгэгдсэн баримт бичгийн жагсаалтыг эхний баримт бичгийн төрөл эсвэл заасан хэмжээнээс их бүртгэлийн огноотой оруулна.

Сонголт 8

1. Дуудлагын тодорхой шалтгаантай эмч нарын жагсаалтыг оруулна уу.

3. Бүртгүүлсэн огноо, бүртгүүлсэн шалтгаан, тухайн хугацааны томилгоонд бүртгүүлсэн баримт бичгийн лавлагааны PIB-г оруулна.

Сонголт 9

1. Заасан төрөлд орохыг зөвшөөрсөн эмч нарын жагсаалтыг оруулна уу.

2. Хугацаа томилохдоо бүртгэлийн огноотой баримт бичгийн жагсаалтыг оруулна.

3. Бүртгүүлсэн огноо, зөвшөөрлийн төрөл, тухайн үеийн томилгоонд бүртгүүлсэн баримт бичгийн лавлагааны PIB-г оруулна.

4. Баримт бичгийн кодоос бүртгэгдсэн баримтын жагсаалтыг өгөгдсөн мужид оруулна.

Сонголт 10

1. Томилогдсон тариалалтаас дадлагажигч нарын жагсаалтыг оруулна уу.

2. Үгийн фрагментийн утгатай байж болох баримт бичгийн жагсаалтыг оруулна уу.

3. Тухайн үеийн томилгоонд бүртгүүлсэн баримт бичгүүдэд бүртгүүлсэн огноо, баримт бичгийн төрөл, өмчлөгчийн PIB, байгууллагын нэрийг оруулна.

4. Бүртгэгдсэн баримт бичгийн жагсаалтыг заасан баримт бичгийн төрлөөс эсвэл сүүлийн утгаас бага баримт бичгийн кодтой оруулна.

Сонголт 11

1. Тухайн тариалалтаар хүлээн зөвшөөрөгдсөн дадлагажигч нарын жагсаалтыг оруулна уу.

2. Хугацаа томилохдоо бүртгэлийн огноотой баримт бичгийн жагсаалтыг оруулна.

3. Тухайн үеийн томилгоонд бүртгүүлсэн баримт бичгийн лавлагааны бүртгэл, тооцоо, PIB-г оруулна.

4. Баримт бичгийн кодоос бүртгэгдсэн баримтын жагсаалтыг өгөгдсөн мужид оруулна.

Сонголт 12

3. Тухайн тооны малын түрээсээс хэрхэн эзэмшиж, хэдэн малыг нь ангилж, хэдэн хувиар унасан зэрэг мэргэжлүүдийн жагсаалтыг оруулна.

Сонголт 13

1. Өгөгдсөн төрлөөс өмчийн жагсаалтыг оруулна уу. 2. Эзэмшгийнхээ жагсаалтыг дуулаач гэж бичээд байгаа юм шиг бичээрэй.

3. Ашиглалтаас хасагдсан эд хөрөнгийн төрлөөр нь ангилсан дүнг оруулна.

4. Ажилд орсон огноог эхний өдрөөс илүүтэйгээр ажилд авах тухай мэдээллийг оруулна.

Сонголт 14

1. Тохируулсан хуудасны төрлөөс тасалбарын жагсаалтыг оруулна уу.

2. Өнгө нь нэгээс илүү үнээр зарагдсан хэрэгцээт кодуудын жагсаалтыг оруулна уу.

3. Шуудангийн ажилтны дуулах кодын дагуу төлбөр төлөх хугацаа, дүнг бичиж, шуудангийн ажилтны нэр, өнгийг оруулна.

4. Дууны дугаараас өндөр эсвэл илүү гоёмсог тасалбарын өнгө, зэрэглэлийн жагсаалтыг оруулна уу.

Сонголт 15

1. Уулзалтын хугацааны дугаарт хүрсэн үйлчлүүлэгчдийн жагсаалтыг оруулна уу.

2. Арьсны үйлчлүүлэгчийн дугаарын төлбөрийн нийт дүнг оруулна.

3. Ирсэн огноо, өрөөний төрөл, үйлчлүүлэгчдийн PIB, уулзалтын цагийг бүртгэнэ.

4. Нэг өрөөнд бүртгүүлсэн үйлчлүүлэгчдийн жагсаалтыг оруулна уу.

Сонголт 16

1. Өгөгдсөн төрлөөс өмчийн жагсаалтыг оруулна уу.

2. Дууны үйлчлүүлэгч түрээслэх гэх мэт эд хөрөнгийн жагсаалтыг оруулна уу.

3. osіb, yakі тэр тооны малын түрээсээс эзэмшиж, малын тоо, хэрхэн унах талаар ангилж, жагсаалт оруул.

4. Үйлчлүүлэгчдийн талаарх мэдээллийг хаягаар нь ангилан оруулна.

Сонголт 17

1. Худалдан авалтын үнээс анхны үнийн дүнгээс их буюу баталгааны хугацаанд заасан тоо хэмжээнээс дээш үнийн дүнгийн жагсаалтыг оруулна уу.

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

3. Зориулалтын муж дахь кодоос vartosti утгын нийлбэрийг оруулна уу.

4. Зориулалтын хүрээнд ажиллахаар элссэн өдрөөс эхлэн материаллаг хүчинтэй нөхцлийн жагсаалтыг оруулна.

Сонголт 18

1. засвар robits нь өөрчлөлт Vivest, vikonanih дуулж мастер.

2. Ажлын өмнө орсон, нэр нь тусгайлсан үгтэй ажлын үе шатуудын жагсаалтыг оруулна.

3. Заасан хязгаарын кодоос ажлын засварын ажлын зардлын нийлбэрийг оруулна.

4. Заасан хязгаарт роботыг хүлээн авсан өдрөөс эхлэн файлуудын жагсаалтыг оруулна уу.

Сонголт 19

1. Эхний уншилтаас ликивийн жагсаалтыг оруулна уу.

2. Нэгээс илүү лик зарагдсан чекийн дугаарын жагсаалтыг оруулна уу.

3. Заасан дугаараас чекийн касс, кассын худалдсан огноо, дүн, PIB-г оруулна.

4. Заасан хэмжээнээс их буюу эхний утгаас бага лик кодтой савлагаатай ликийн жагсаалт болон тэдгээрийн аль нэгийг нь оруулна.

Сонголт 20

1. Томилогдсон тариалалтаас дадлагажигч нарын жагсаалтыг оруулна уу.

2. Үгийн фрагментийн утгатай байж болох баримт бичгийн жагсаалтыг оруулна уу.

3. Хугацаагаар бүртгүүлсэн баримтын бүртгэлийн огноо, баримт бичгийн төрөл, PIB огноо, огнооны баримтыг оруулна.

4. Заасан баримт бичгийн төрлөөс бүртгэгдсэн баримт бичгийн жагсаалт эсвэл эхний мужид хамаарах баримт бичгийн кодыг оруулна.

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

Энэхүү түгээлтийн сэдэв нь бизнесийн логикийг хэрэгжүүлэхийн тулд InterBase мэдээллийн сангийн нэмэлтээр жижиглэн худалдаачдад танилцуулсан хамгийн чухал хэрэгслүүдийн нэг юм. болон даалгавруудыг тохируулахад шаардагдах кодын хэмжээг өөрчлөх.Хадгалсан процедурыг өөрчлөхгүйгээр өгөгдлийн сангийн программыг дуусгах нь бараг боломжтой.
Ихэнх харилцааны DBMS-д чухал ач холбогдолтой хадгалагдах процедуруудын өргөн сонголт байгаа хэдий ч InterBase процедур нь бараг бүрэн гүйцэд өгөгдлийн багцын үүргийг гүйцэтгэж, тодорхой SQL асуулгад үр дүнг эргүүлэх боломжийг олгодог.
Rosobniks, байнга түлхэж, тодорхой sql-zapitiv нь сарлагийн набир зүгээр л сарлагийн nabir сурах soberezhezhe журам, yaki баас хичээнгүйлэн, мөн празувати цаг миль, бодит гараар өндөр түвшинд байна.
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єєєєє, vіd mivi KHP "Trigeri" (1-р хэсэг) -д хянагдсан гэж мэдээлсэн.

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

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

PROCEDURE нэр үүснэ
[(парам өгөгдлийн төрөл [, параметрийн өгөгдлийн төрөл...])]
)]
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ієї тушаалын мөн чанар нь тодорхой байна, гэхдээ одоохондоо энэ нь тэнд эргэж параметрүүдийг дамжуулах шаардлагатай байгаа нь чухал ач холбогдолтой, була viklikan одод журмыг хадгалсан.

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

Процедурын дунд байгаа оператор кома (;) бүхий толботой төгсөх болно гэдгийг хүндэтгэ. Стандарт SQL командын дистрибьютер гарах цэг нь танилцуулга командын текст зөв бөгөөд түүнийг боловсруулах шаардлагатай гэсэн SQL орчуулагч руу дохио өгч байгаа бололтой. Чи тийм биш харж байна, scho, HP дунд кома нь толбо харуулж, SQL орчуулагч тушаалыг яг оруулсан байна гэдгийг хүлээн зөвшөөрч, процедурын хэсгийг viconate оролдох, юу авч байна? 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-д (мөн түүний бүх клонд) хоёр төрлийн процедур байдаг: сонгох боломжтой процедурууд болон гүйцэтгэх процедурууд. Роботууд нь хоёр төрлийн HP-тэй байдаг нь сонгон шалгаруулах процедур нь олон тооны өгөгдлийг харж болох тул дараалан бүлэглэсэн оролтын параметрүүдийн хувийн бус багцыг эргүүлэхийг шаарддагтай холбоотой бөгөөд viconation процедур нь боломжгүй юм. параметрүүдийг эргүүлэх, эсвэл буцаах, параметрийн нэг эгнээнд дангаар нь эргүүлэх боломжтой. Сонгосон процедурууд нь SELECT асуулгын хажууд дуудагдах ба дуудагдсан процедурууд нь EXECUTE PROCEDURE командын тусламжтайгаар хийгдэнэ.
Хадгалсан процедурыг хараад гомдоосон, ижил синтаксийг бий болгож, албан ёсоор юу ч эсэргүүцдэггүй, дараа нь уг процедурыг SELECT асуулгад ашиглаж болох эсэх, энэ нь сонгон шалгаруулах процедур мөн эсэхээс үл хамааран ГҮЙЦЭТГЭХ ЖУРАМ-ын тусламжтайгаар. Хоол тэжээл нь CP янз бүрийн төрлийн ёс бус үйлдэлтэй хэрхэн харьцаж байгаад оршино. Өөрөөр хэлбэл, долоо хоног бүрийн дуулах төрөлд зориулсан процедурын загвар нь ялгаатай байна. Тиймээс сонгон шалгаруулах процедурыг SELECT асуулгад тусгайлан зориулж, сонгосон процедурыг ГҮЙЦЭТГЭХ АЖИЛЛАГАА асуулгад тусгайлан үүсгэсэн болно. Эдгээр хоёр төрлийн HP-ийг зохион бүтээхдээ ямар хүчийг анхаарч үзэхийг харцгаая.
Ойлгохын тулд, процедур-чичиргээг хэрхэн дадлагажуулах, онол руу бага зэрэг орох. SELECT ID, NAME FROM Table_example гэх мэт энгийн SQL асуулга авч үзье. Үүний үр дүнд бид хоёр багана (ID ба NAME) ба ижил тооны мөр (Хүснэгт_жишээ хүснэгтийн ижил тооны мөр) -ээс бүрдэх гаралтын хүснэгтийг харгалзан үздэг. Энэ асуулгын үр дүнд хувирсан хүснэгтийг мөн SQL өгөгдлийн багц гэж нэрлэдэг. . Дараа нь сервер нь хүсэлтийн үр дүнг илгээдэг арьсны бичлэгийг уншиж, түүнээс шаардлагатай талбаруудыг (ID болон NAME тохиолдолд) сонгож, үйлчлүүлэгч рүү мессеж илгээдэг. Процессыг дахин давтъя - арьсны чичиргээний бичлэгийн хувьд.
Ухаалаг уншигч бүх SQL өгөгдлийн багцууд, тэр дундаа хадгалагдсан процедурууд дараалан үүсдэг гэдгийг ойлгохын тулд бүх алхамуудыг хийх шаардлагатай! Процедурын гол онцлог нь эхнийх нь нүүргүй эгнээ эргүүлэхэд зориулагдсан, бусад нь зөвхөн нэгд зориулагдсан байсан тул процедурын төрлийг сонгох явдал юм. Тийм ч учраас өмхий үнэр нь өөр өөр байдлаар zastosovyatsya: журам-сонголт нь бүх бүртгэлийг шалгах журамд "wimage" гэх мэт SELECT командын тусламжийг дууддаг тул та үүнийг эргүүлж болно. гэж нэрлэдэг журам нь "wiymaє" HP-аас зөвхөн нэг эгнээ болон reshta (navit yakshcho өмхий!) Үл тоомсорлох гэх мэт ГҮЙЦЭТГЭХ ЖУРАМ-ын тусламж дууддаг.
Сонгон шалгаруулалтын журмын жишээг харцгаая, ингэснээр илүү ойлгомжтой болно. Учир нь > Өршөөлийн, -ийн журмыг хадгалж үзье, сарлагийн pratsyuє тийм болохоор өөрөө, сарлаг асуух 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-г өөрчлөх хэрэгтэй */

ТӨГСГӨЛ

Энэхүү жижиг кодын хэсэг нь алхам гэсэн үг: Хүснэгтийн_жишээ хүснэгтээс сонгосон арьсны эгнээний хувьд 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 команд нь өгөгдлийн мөрийг үйлчлүүлэгч рүү эргүүлж байгаа мэт мөчлөгийн сүүлчийн мөчлөгт ашиглагдах ёстой.

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

Crim 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 өгнө. Сонгосон өгөгдлийг varto биш харин үр дүнд нь эргүүлэх болно гэдгийг та санаж байгаарай: гаралтын параметрүүдийг өгсөн нь үйлчлүүлэгч 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, :бүтэн_барааны_нэр
ХИЙХ
ЭХЛЭХ
/"Нэмэлт функц байгаа эсэхийг шалгаж байгаа тул ҮНЭН гэж эргүүлж, гараа эргүүлэхэд нэг эгнээ болно. Хэрэв олдсон 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 холбоотой юм. хадгалсан журмууд болон роботууд.

22 анги

WinForms Client/Server үндсэн программ дээр бичих тухай миний мэдлэг маш энгийн бөгөөд үүнд би ирсэн:

Vykoristovuvat процедурыг анхаарч үздэг:

  • Эвхэгддэг роботын ажилтан болсныхоо төлөө. Хэрэв та ажиллахаар шийдсэн бол танд хүснэгтийн курсор эсвэл темп хэрэгтэй болно, тиймээс үүнийг SQL Server дээр ажиллуулах хамгийн сайн аргыг дуудаарай.
  • Та өгөгдөлд хандах хандалтыг хаах хэрэгтэй байж магадгүй. Хэрэв та coristuvachas-ийн хүснэгтэд (дүргийн болон бусад) хандах эрх өгөхгүй бол тэдэнтэй харилцах цорын ганц арга зам бол хамтарсан үйлдвэр юм гэдэгт итгэлтэй байж болно.

Тусгай хүсэлтийн ялалт:

  • CRUD-ийн хувьд, хэрэв та өгөгдөлд хандах хандалтыг завсарлах шаардлагагүй бол (учир нь та үүнийг өөр аргаар хийх хэрэгтэй).
  • Хамгийн энгийн онигооны хувьд. хошигнол нь хувийн бус шалгуур нь SP бий болгох - энэ нь үйлчилгээний бүх нугалах юм. Хэрэв та швед нудрах хүсэлт үүсгэж чадвал нүдээ ирээрэй.

Миний нэмэлтүүдийн ихэнх нь, би SP шиг ялсан, тиймээс ad-hoc sql, Би бага, бага vicorist SP, C # шиг кодтой эцсийн уутанд өмхий хэлтэрхий, зөвхөн илүү их хяналт, тест болон сайжруулах. Та тодорхой шалтгааныг мэдэхгүй байгаа тул би хоёр утастай ad-hoc sql хийхийг зөвлөж байна.

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

Та програмаасаа асуухад та өгөгдлийн загварынхаа талаар тодорхой хэлэх болно.

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

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

Өгөгдөлтэй хүний ​​хувьд би тэднийг түр зуурын хүсэлтийг хүлээн авах хүртэл өгөгдлийн сангийн арын ажлыг хараагүй тул үр дүнтэй суралцах эсвэл тэдэнд анхаарал тавих нь чухал юм. Би схемийг өөрчлөхөд юу хувь нэмрээ оруулах боломжтойг хэрхэн олж мэдэх вэ? Нэмж дурдахад, би coristovats нь толин тусгал хамгаалалт бүхий мэдээллийн сангийн хүснэгтэд шууд хандах эрх олгох ёстой гэж би бодохгүй байна (мөн би зөвхөн SQL тарилга довтолж чадахгүй байна, гэхдээ бас үндсэн дотоод хяналт, шууд эрх, vimagaє зөвшөөрөхгүй байна. vіd usіh koristuvachіv vikoristovyte зөвхөн procs, хөтөлбөрт хүлээн зөвшөөрөгдсөн, schob zapobіgti mozhlivogo shahraystvo.

Өгөгдлийн бааз нь объект хандалттай бөгөөд объект хандалтат талаас нь харахад сайн харагддаг код нь үндсэн өгөгдлийн үүднээс бүрэн сүйрдэг.

Манай жижиглэнгийн худалдаачид бидэнд сануулж байгаа нь бидний мэдээллийн санд хандах бүх хандалт нь процессоор бий болдог бөгөөд ингэснээр бид өршөөлийн засварыг мэдэгдэхүйц хурдасгаж, өгөгдөлд худал хуурмаг, дараа нь зүгээр л ажил дээрээ процедурыг ажиллуулна. орчин, мөн шинэ код үүсгэж болохгүй, дахин эмхэтгэж, virobnitstvo-д дахин давуу талтай. Бидний бүх үйл явц жолоочийн гарт байсан гэж бид үзэж байгаа тул dzherel-ийн удирдлага нь асуудал биш юм. Хэдийгээр дарс Subversion-д ороогүй ч дарсны dbas нь үе үе харагддаг бөгөөд Source Control-ыг дэмждэггүй.

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

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

Хадгалах процедурын гол цөм болох .sql файлаас үргэлж эхлэх хэрэгтэй. Кодоо бичсэнийхээ дараа йогог керування хувилбараар нийтлээрэй. Дараагийн удаа, хэрэв та хадгалсан зүйлээ өөрчлөхийг хүсвэл өгөгдлийн баазынхаа доор өөрийн гадаад хяналтын элементийг устгана. Хэрэв та үүнийг дагаж мөрдвөл кодтой адил сайн менежменттэй болно.

Би энд Oracle-ийн Том Кайтаас эш татмаар байна... Энэ бол код бичих дүрэм... Хэдийгээр энэ нь бага зэрэг таарахгүй байсан ч би илүү сайн мэднэ гэж бодож байна.

Манай хавсралтад бид асуухад ашиглаж болох кодтой байдаг (мөн заримдаа бидэнд хадгалагдсан процедур хэрэгтэй болно). Tse бидэнд олгодог:

  • амархан otrimat бүх pіd h cheruvannya хувилбаруудыг асуу
  • янз бүрийн мэдээллийн сангийн серверүүдэд зориулсан арьс арчилгааны бүх өөрчлөлтийг robiti
  • Манай кодоор дамжуулан ижил кодын давталтыг багтаасан болно

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

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

Хадгалсан процедур нь илүү үр дүнтэй гэж маргаж, өшөө авах хэрэггүй. текст илгээсэн

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

Deyakі rechі, yaki-ийн талаар бодох хэрэгтэй: Процедурууд хэнд хэрэгтэй вэ, тэд юу хэмнэж байна вэ?

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

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

Хэрэв та түр зуур асуумаар байвал параметржүүлсэн гэсэн бодлоо өөрчил

SQL эсвэл SPROC параметржуулалт ... бүтээмжийн хувьд тийм ч чухал биш ... та тэдгээрийн аль нэгийг нь оновчтой болгох хүсэлт гаргаж болно.

Миний хувьд SPROC-ийн бусад давуу тал нь би SQL эрхийг удирдах олон эрхийг хааж чадна, зүгээр л sprocs-д нэвтрэх эрхийг минь өгөөрэй... Ингэснээр та Parametized SQL-г хожиж, нэвтэрч, холболтын эгнээнд холбох боломжтой болно. , магадгүй илүү (жишээ нь тэд хандах боломжтой хүснэгтүүдийн аль нэгийг сонгохын тулд ямар ч төрлийн операторын бичлэг).

Би өмнөх шигээ параметржүүлсэн SQL-г илүүд үздэг тул ...

Бүтээмжийн аргумент sproc є spirnim - 3 дээд RDBM нь уух болон өдөр тутмын цагийн төлөвлөгөөг буцааж ялдаг. Ёогоо баримтжуулсан... 1995 он гэж юу вэ?

Гэсэн хэдий ч, таны хөтөлбөрт SQL-ийг хэрэгжүүлэх нь бас муухай дизайн юм - кодын засвар үйлчилгээ, магадгүй баячуудын хувьд тийм ч сайн ойлголт биш юм.

Үүний нэгэн адил, хөтөлбөр нь нэмэлт ORM (kіlkoh-аас хол ногоон талбайн нэмэлтүүд!), Tse vіdminny vibrіr, таны ангийн oskіlki загвар keruє таны DB загварыг зүгээр л нэг цаг гэж эхнээс нь эхэлж болно.

ORM бүтэц байхгүй тул бид хайбрид pidhide-г хакердаж SQL нөөцийн XML файлыг үүсгэж, шаардлагатай бол SQL-ийн мөрийг асуусан (өмхий үнэрийг нөөцийн дэд бүтцээр хадгалдаг). SQL нь кодын хувьд ижил төстэй жижиг засваруудыг шаарддаг шиг - SQL-ийн эгнээнд илүү их хэмжээний засвар хийх шаардлагатай болно, бид энэ дэд гарчгийг дахин бодох болно.

Энэ эрлийз хүүхэд нь жижиглэн худалдаачдыг удирдахад илүү хялбар байдаг (магадгүй, миний баг жижиг, миний баг үүнийг зөв хийж чадна, ингэснээр би хүсэлтийн төлөвлөгөөг уншиж болно), мөгөөрсөн хоолой нь зүгээр л SVN-ийн дахин баталгаажуулалт юм. Нэмж дурдахад би танаас RDBM-г солихыг хүсэх болно - зүгээр л SQL нөөц файлыг солих болно (мэдээж ORM хэрэгсэл шиг тийм ч хялбар биш, гэхдээ энэ нь хуучин систем эсвэл өгөгдлийн сантай ажилладаг бөгөөд үүнийг дэмждэггүй)

Миний бодлоор хадгалагдсан хүсэлт ба / эсвэл журмын 90% нь цаг товлоход буруугүй (хүлээн зөвшөөрсөн, гараар).

Мэдээллийн хандалтыг автоматаар үүсгэж болно. Та эмхэтгэх үед статик эсвэл бүтээх үед динамикаар процедур үүсгэх үү, эсвэл хүснэгтэд багана (объект эрх мэдэл) нэмэхийг хүсвэл зөвхөн нэг файлыг өөрчлөх боломжтой.

Би бүх өгөгдлийг хадгалах болно хандалтпрограмын код, энэ тохиолдолд өгөгдөлд хандах хандалтыг SQL-хүсэлтээс шууд авах боломжтой. Нөгөө талаас логик удирдлага, Би өдөөгч, хадгалах журам, үндсэн функцууд болон бусад зүйлсийг хараад мэдээллийн санд байрлуулсан. Би өгөгдлийн сан, өгөгдөл үүсгэхэд хүндэтгэлтэй ханддагийн жишээ бол манай үйлчлүүлэгч овог нэртэй байж болно. Одоо koristuvach интерфэйсийн хувьд DisplayName хэрэгтэй байна, учир нь энэ нь ямар нэг энгийн логикоос харагдаж байна. Энэ үеийн хувьд би хадгалагдсан процедурыг үүсгэсэн бөгөөд дараа нь мөрийг шинэчлэх бүрт гохоор ажиллуулна (өөрөөр бол бусад өгөгдөл).

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

Би маш олон муу загвар хийснээр SP-ийн санааг идэвхжүүлж чадна. Жишээ нь, миний оролцсон нэг төсөл дээр ширээ, ширний CRUD гэж бичих гэж оролдсон, өмхий үнэртэй байсан. Үүний зэрэгцээ өмхий үнэр нь зүгээр л нэг тэнэг бөмбөг нэмэв. Ийм ярианы талаар бодохоор илүү их өвддөг.

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

ЖУРАМ ҮҮСГЭ [({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 оноож болно. Хэд хэдэн ижил нэртэй дэд программыг дуудахдаа шаардлагатай дэд хөтөлбөрүүдийн тэмдэглэгээг багахан хугацаанд төлнө.
. Ихэнх тохиолдолд бүх процедурыг өгөгдсөн нэрээс хуваарилдаг бөгөөд хэрэв тийм зүйл байхгүй бол бүх функцийг өгөгдсөн нэрнээс авдаг.
. Илүү гүнзгий дүн шинжилгээ хийхийн тулд эдгээр дэд хөтөлбөрүүд орхигдсон тул олон зуун ийм даниталууд виконання (ГҮЙЦЭТГЭХ) давуу эрхтэй байж болно.
. Їх нь параметрийн тоог асуулга дахь аргументуудын тоогоор тодорхойлдог ті гэж сонгосон. Эдгээр албан тушаалын өгөгдлийн төрлүүд болон параметрүүдийг шалгана.
. Хэрэв нэгээс олон дэд хөтөлбөрийг орхигдуулсан бол хамгийн богино шалгууртай нэгийг сонгоно.
Oracle-ийн практикт полиморфизмыг зөвхөн багцад илэрдэг функцүүдэд зөвшөөрдөг. [имэйлээр хамгаалагдсан]- Бусад схемүүд болон Sybase болон MS SQL Server-д фокус хаагдсан байдаг.

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

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

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

ТӨГСГӨЛ

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

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

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