Изпълнете незабавно с клауза INTO
Вроден динамичен SQL или NDS помага на разработчиците, като осигурява гъвкавост, подобрява производителността и опростява синтаксиса на програмиране. Днес в този урок ще научим как да напишем динамична SQL заявка в Oracle Database с помощта на Execute Immediate Statement.
И така, какво е Изпълнение на незабавно изявление в Oracle Database?
С помощта на Execute Immediate можем да анализираме и изпълняваме динамично всеки SQL оператор или PL/SQL блок в Oracle Database. И под динамично имам предвид по време на изпълнение.
Изпълнението незабавно приема само един аргумент. Той може да бъде SQL израз или PL/SQL блок. Компилаторът третира аргументите на оператора Execute Immediate като низ от типове данни VARCHAR2. Затова се уверете, че сте поставили вашата SQL заявка или PL/SQL блок в двойката единични кавички ( ‘’).
Можем ли да използваме SQL израз с Execute Immediate?
Всеки SQL оператор или PL/SQL блок, който връща единичен ред резултати, може да се използва с Execute Immediate. Освен това, ако вашето изявление връща повече от един ред резултати, тогава има и други начини. Освен това ще ги обсъдим в бъдещи уроци.
Какъв е синтаксисът на Изпълнение на незабавно изявление?
Синтаксисът на изявлението Execute Immediate е доста прост. Нека да го разгледаме.
EXECUTE IMMEDIATE dynamic_query [INTO user_defined_variable-1, user_defined_variable-2…] [USING bind_argument-1, bind_argument-2…] [RETURNING|RETURN-INTO clause];
Къде:
Изпълнете незабавно :Изпълнение незабавно е запазена фраза.
Dynamic_query :Следва запазената фраза, която трябва да напишем нашата динамична заявка. Тази заявка може да бъде SQL оператор или PL/SQL блок. Освен това компилаторът третира динамичната заявка като низ от тип данни VARCHAR2. Ето защо трябва да сте сигурни, че сте поставили заявката си в двойка единични кавички.
клауза INTO :Използвайки клауза INTO, ние посочваме списъка с дефинирани от потребителя променливи. Освен това те ще задържат стойностите, върнати от динамичния оператор SELECT. Той е много подобен на оператора SELECT-INTO. Освен това е незадължителна клауза, така че ако не ви е необходима, можете да я пропуснете.
клауза USING :В случай, че сте използвали променлива за свързване във вашата динамична заявка, тогава тази клауза ще ви позволи да посочите стойностите за тази променлива за свързване. Те от своя страна ще бъдат съответно заменени по време на изпълнение. Отново, това е незадължителна клауза.
ВРЪЩАНЕ илиВЪРНЕТЕ В клауза:Клаузата за връщане в е противоположна на клаузата USING. Докато при клаузата using ние предоставяме стойностите на динамичната заявка, тук в клаузата RETURNING INTO получаваме стойностите, върнати от динамичната заявка. И ги съхранявайте в посочения списък с аргументи за свързване. Отново това е незадължителна клауза.
Можете също да гледате подробното обяснение на горния синтаксис в съответния видеоклип тук.
Пример за изпълнение на незабавно изявление.
Извършването на демонстрация на незабавно изпълнение с помощта на всички гореспоменати клаузи ще увеличи сложността и ще направи примера труден за разбиране. Което е точно обратното на това, което искаме.
По този начин, за да запазим концепцията проста и лесна за научаване, ще направим примера на Execute Immediate, използвайки първата клауза, която е INTO.
Изпълнете незабавно с клауза INTO.
SET SERVEROUTPUT ON; DECLARE sql_qry VARCHAR2 (150); emp_tot NUMBER(3); BEGIN sql_qry:= ‘SELECT count (*) FROM employees'; EXECUTE IMMEDIATE sql_qry INTO emp_tot; DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot); END; /
Ето един много прост пример, демонстриращ как да използвате execute immediate с INTO клауза в Oracle Database. Да видим какво направихме тук.
Раздел за декларация
В секцията за декларации сме декларирали две променливи. Първата променлива е sql_qry от тип VARCHAR 2. Ще използваме тази променлива, за да съхраняваме оператора SELECT, който искаме да изпълним с нашия оператор EXECUTE IMMEDIATE. Тъй като тази променлива ще съдържа DML израз, трябва да се уверим, че има достатъчна ширина на данните.
Втората е дефинирана от потребителя променлива emp_tot. Ще използваме тази променлива с клауза INTO, за да съхраняваме данните, върнати от нашия оператор SELECT.
Раздел за изпълнение
В този раздел имаме само три твърдения. Това са:
Изявление 1 :
В първия израз присвояваме валидна SQL заявка на променливата sql_qry.
Изявление 2 :
Вторият оператор е операторът EXECUTE IMMEDIATE – INTO. В това изявление непосредствено след написването на запазената фраза execute immediate пишем името на променливата sql_qry. Същата променлива, в която съхраняваме оператора SELECT.
При изпълнение машината за изпълнение ще замени тази променлива със съдържанието, което държи, което в нашия случай е оператор SELECT. Ако няма грешка, машината по време на изпълнение ще изпълни основния оператор SELECT. След това върнете резултата, ако има такъв.
Междувременно нашият оператор SELECT ще върне стойност, която е общият брой редове в таблицата на служителите. Използвайки клауза INTO на израза EXECUTE IMMEDIATE, ние ще съхраняваме тази връщаща стойност в променливата emp_tot.
Изявление 3 :
Третият израз е изходен оператор, с помощта на който показваме стойността на променливата emp_tot обратно на потребителя.
Информация:
В случай на DML транзакция се изисква изричен комит, тъй като Execute Immediate няма да извърши автоматично DML транзакция.
Алтернативен начин за написване на този раздел за изпълнение е:
BEGIN EXECUTE IMMEDIATE 'SELECT count (*) FROM employees' INTO emp_tot; DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot); END; /
Ако искате, можете да пропуснете напълно първото твърдение. Просто напишете SQL заявката директно след запазената фраза EXECUTE IMMEDIATE.
Моля, гледайте видеоклипа в моя канал в YouTube, за да научите какъв е правилният начин за писане на заявката за Execute Immediate.
Какво мислите вие?
Лично аз харесвам предишния начин, при който използвахме променливата за съхранение на заявката. И по-късно използва тази променлива с Execute Immediate. Защото това прави кода ни да изглежда чист и чист. Освен това ни помага да следим нашата заявка в случай, че някога искаме да я променим или модифицираме.
какво мислите, момчета? Кой начин на писане на Execute Immediate ви харесва най-добре? Първият или последният. Кажете ми вашите мнения на моята Facebook страница или в моя Twitter.
Ако смятате, че ученето чрез гледане на видеоклипове е много удобно, тогава можете да гледате видеоклипа в моя канал в YouTube. И научете за Execute Immediate с клауза INTO.
Досега в този урок научихме какво е Изпълнение на Immediate Statement и как да го използваме за динамично изпълнение на SQL заявка с помощта на клауза INTO в Oracle Database. Мисля, че това е достатъчно за този урок. Нека го направим опростено, като не го разтягаме допълнително.
Не забравяйте да се абонирате за моя канал в YouTube за още интересни уроци.
Благодаря и приятен ден!