Замяна на амперсанд
Разработили сте добра заявка и може би искате да я използвате в бъдеще. Понякога е полезно да имате мъниче за заявки, което указва променливите, които ще бъдат заменени със стойности при изпълнение на заявките. Oracle предоставя тази функционалност под формата на така наречената замяна на амперсанд. Всеки елемент на оператор SELECT може да бъде заменен по време на изпълнение и като запазите само ключовите елементи в заявката и въведете динамични променливи, можете да избегнете много скучна и повтаряща се работа. Ще разгледаме заместването на променливите и ключовите думи DEFINE и VERIFY.
Промяна на променливите
Замяната на променливи може да се разглежда като зашеметяващо. SQL заявката се състои от две или повече части. Всяка част може да бъде разделена на части, които се състоят от текст. Всеки текст, подчаст или част може да бъде посочен като заместител.
Замяна с един амперсанд
Най-простата и популярна форма на SQL елемент е замяната на единичния амперсанд. Символът за амперсанд (&) е избран за присвояване на променлива в заявка и променливата се състои от амперсанд и името на променливата без интервал между тях. Когато се изпълни заявка, процесът на сървъра на Oracle вижда променливата за замяна и се опитва да определи нейната стойност по два начина. Видени за първи път дефинирани дали променливата е в сесията на потребителя. (Ще разгледаме командата DEFINE малко по-късно.) Ако променливата не е дефинирана, тогава потребителският процес иска стойността, на която съответната променлива ще бъде заменена. След въвеждане на стойността, заявката се изпълнява от сървъра на Oracle. Заместването на променливата амперсанд се случва по време на изпълнение на заявката и понякога се нарича свързване по време на изпълнение или заместване по време на изпълнение.
изберете идентификатор на служител, фамилно име, номер на телефон от служители
Когато изпълните заявката си, Oracle ще ви поиска входна стойност за променлива с име LASTNAME. Можете да въведете фамилното име на служителя, ако го знаете, например ‘King’. Ако не знаете фамилното име, но знаете номера, можете да въведете всяка стойност и да натиснете OK, за да въведете стойността. След това Oracle ще поиска стойности за променливата EMPNO. След въвеждане на стойност, например 0, и щракване върху OK, не са останали променливи, които да бъдат заменени и се изпълнява следващата заявка
изберете идентификатор на служител, фамилно име, номер на телефон от служители
където last_name = ‘King’ или worker_id = 0;
Всяка символична стойност с валидно име може да бъде присвоена на променлива. Буквалната стойност, която ще бъде заменена, трябва да бъде от подходящия тип данни, в противен случай ще получите грешката „ORA-00904: невалиден идентификатор“. Ако променливата предполага стойност или стойност на данни, тогава литералът трябва да бъде затворен в единични кавички. Полезен начин за избягване на грешки в типа данни е да се затвори променливата в кавички, ако е необходимо. Тогава потребителят не трябва да знае за типа данни.
изберете идентификатор на служител, фамилно име, номер на телефон от служители
Двоен амперсант
Когато променлива се използва многократно в заявка, Oracle ще поиска стойност всеки път, когато променливата се срещне в заявката. За сложни заявки това може да бъде много неефективно и да подлага на грешки. Следващата заявка избира FIRST_NAME и LAST_NAME от таблицата EMPLOYEES, която съдържа символи в двете колони
изберете first_name, last_name от служителите
Двете условия са еднакви, но се проверяват за различни колони. Когато заявката се изпълни, Oracle първо изисква да въведете стойност за променливата SEARCH, използвана в първата клауза, с колоната LAST_NAME. След това ще ви е необходим вход, за да замените използваната стойност на SEARCH в сравнение с FIRST_NAME. Това въвежда два проблема. Първо, неефективно е да въвеждате една и съща стойност два пъти, и второ и по-важното е, че можете да направите печатна грешка, когато я въведете отново, тъй като Oracle не проверява идентичността на въведената стойност за променлива. В този пример е логично предположението, че стойността на променливите трябва да бъде еднаква, но фактът, че променливата има същото име, не означава за Oracle, че стойността трябва да бъде еднаква. Първият пример на фигура 9-7 показва резултата от изпълнение на заявка и въвеждане на две различни стойности за заместване на променлива. В този пример резултатът е неправилен, тъй като първоначалното изискване е фамилията и името на служителя да съдържат същия литерал.
Когато заместването на променлива се извършва няколко пъти в една и съща заявка и знаете, че стойността трябва да е една и съща всеки път, когато споменете променливата, за предпочитане е заместването с двоен амперсант. Това изисква два амперсанта пред името на променливата да бъдат използвани няколко пъти. Когато Oracle види двоен амперсант, стойността на променливата на сесията се присвоява и няма да бъдете подканени, когато променливата се срещне по-нататък в заявката.