Vložte DML s proměnnou Bind:Proč?
Pojďme na to! Dvě největší výhody proměnných vazby jsou zabezpečení proti injekcím SQL a zvýšení výkonu snížením náročné analýzy. Kvůli těmto výhodám se použití proměnných vazby ve vašem kódu nejen navrhuje, ale také doporučuje.
Nebude třešničkou na dortu, když se nám podaří vymyslet způsob, jak používat Bind Variables s nativním dynamickým SQL? Pokud vás to zajímá, tak moji drazí přátelé, jste na správném místě, protože přesně to uděláme v tomto blogu.
Co je proměnná vazby?
Vazebnou proměnnou můžeme definovat jako proměnnou, kterou vytvoříme v SQL*Plus a poté odkazujeme v PL/SQL. Dále můžeme deklarovat proměnnou Bind kdekoli v hostitelském prostředí. Proto jsou proměnné vazby také známé jako hostitelské proměnné.
Více o proměnných vazby si můžete přečíst v PL/SQL tutoriálu 6 zde.
Jak používat proměnnou vazby s nativním dynamickým SQL?
Abychom mohli v dynamickém SQL použít proměnnou vazby, musíme si vzít na pomoc „Using Clause ” of Execute Immediate statement.
Co je to Using Clause of Execute Immediate statement?
Ve statickém SQL jsme museli zadat hodnotu pro proměnnou bind po spuštění programu PL/SQL. Zatímco v dynamickém SQL musíme předem zmínit hodnoty všech vazebných proměnných. Stejné, jaké se používají v příkazu SQL, který chceme provádět dynamicky pomocí Execute Immediate.
Abychom tedy specifikovali hodnoty všech vazebných proměnných, použijeme klauzuli USING z Execute Immediate Statement. Použitím klauzule „USING“ vypíšeme všechny hodnoty pro každou proměnnou vazby použité v příkazu SQL, kterou chceme dynamicky spouštět.
Nyní, když jsme se naučili, co jsou vazebné proměnné a pomocí příkazu Using Clause of Execute Immediate, udělejme příklad.
Příklad okamžitého provedení s použitím doložky
Pro demonstraci vložíme data do tabulky. A k tomu použijeme příkaz Execute Immediate. Pro zvýšení bezpečnosti a výkonu budeme také používat proměnnou vazby s Insert DML.
K tomu budeme potřebovat nejprve tabulku, do které můžeme vkládat data. Pojďme si ji proto rychle vytvořit. A jako vždy budu kód udržovat tak jednoduchý, jak je to jen možné, pro snadné pochopení konceptu.
Krok 1:Vytvořte tabulku
CREATE TABLE stu_info( student_name VARCHAR2 (20) );
Krok 2:Připravte prohlášení DML
Je dobrou programátorskou praxí připravit si příkaz SQL, který chcete provést pomocí okamžitého provedení, předem. Tímto způsobem snížíte pravděpodobnost syntaktických chyb.
Omezení pro zápis DML pro okamžité provedení zůstane stejné jako pro příkaz DDL. Podobně jako u příkazu DDL Příkaz DML by neměl být ukončen středníkem. Proto mějme toto na paměti a napišme příkaz INSERT.
INSERT INTO stu_info (student_name) VALUES (:stu_name)
Ve standardním INSERT DML obvykle zapisujeme data do závorek klauzule hodnot. Navíc při spuštění se tato data vloží do odpovídajícího sloupce. Ale jak vidíte, zde jsme použili proměnnou vazby „:stu_name“ namísto pevného kódování jakékoli konkrétní hodnoty pro vložení do tabulky.
Krok 3:Napište kód PL/SQL
Posledním krokem v cyklu je spuštění INSERT DML s proměnnou vazby použitím klauzule USING z Execute Immediate Statement of Native Dynamic SQL.
SET SERVEROUTPUT ON; DECLARE sql_smt VARCHAR2 (150); BEGIN sql_smt := 'INSERT INTO stu_info (student_name) VALUES (:stu_name)'; EXECUTE IMMEDIATE sql_smt USING 'Steve'; END; /
Pojďme pochopit, co se stane při spuštění tohoto PL/SQL bloku. Když spustíte tento program, PL/SQL engine nahradí tuto hodnotu ‚Steve‘ místo proměnné vazby :stu_name a poté provede INSERT DML, který tuto hodnotu vloží do zmíněné tabulky.
Kromě toho existuje několik věcí, o které se musíte postarat při psaní výše uvedeného programu PL/SQL na vašem konci.
- Nezapomeňte uzavřít příkaz INSERT DML nebo Any SQL, který chcete spustit pomocí Execute Immediate, do páru jednoduchých uvozovek. Nezapomeňte také ukončit příkaz přiřazení (řádek 5) i příkaz Execute Immediate středníkem.
- Hodnota, kterou přiřazujete své vazebné proměnné prostřednictvím klauzule USING, musí být stejná nebo kompatibilní s datovým typem sloupce tabulky, do které ji vkládáte. Například v našem případě vkládáme jméno ‚Steve‘, což je znakový řetězec, do sloupce student_name tabulky stu_info, která je datového typu Varchar2. Znakový datový typ je velmi kompatibilní s datovým typem Varchar2.
Prostřednictvím tohoto programu jsme se naučili dvě velmi důležité věci.
- Jak používat INSERT DML s Execute Immediate of Dynamic SQL a
- Jak použít klauzuli USING pro přiřazování hodnot k proměnné vazby použité v dotazu SQL, který chceme spouštět dynamicky.
Kromě toho se nezapomeňte podívat na video, protože tam jsem diskutoval o tom, jak se vypořádat s chybou „ORA-01008:Not All Variables Bound“. Vsadím se, že si nechcete nechat ujít řešení této chyby, protože je velmi důležité z pohledu certifikace databáze Oracle.
Také zůstaňte naladěni, protože v dalším tutoriálu se naučíme, jak se vypořádat s více proměnnými vazby pomocí použití klauzule použití okamžitého spuštění v databázi Oracle.
Doufám, že jste se z tohoto blogu dozvěděli něco cenného. Mezitím jej prosím sdílejte se svými přáteli na svém Facebooku, Twitteru, WhatsAppu nebo jiném médiu, které vám vyhovuje. Také se přihlaste k odběru mého kanálu YouTube pro další rychlé a zajímavé návody. Děkuji a přeji hezký den!