pl sql cursor strings
V tomto tutoriálu se naučíme, co je PL SQL kurzor a související pojmy jako implicitní a explicitní kurzory, kurzor pro smyčku atd. Dozvíme se také o řetězcových funkcích v PL / SQL:
V PL SQL sbírky návod na Série PL / SQL , pomocí příkladů kódu jsme se dozvěděli o metodách Collection, Varray, Nested table a Associative Array.
V tomto článku prozkoumáme různé typy kurzorů, které PL / SQL má. Uvidíme také implementaci různých typů kurzorů s příklady kódu.
Budeme také diskutovat o řetězcích a některých vestavěných řetězcových funkcích dostupných v PL / SQL.
co je rozhodovací strom v dolování dat
Co se naučíte:
Kurzor PL SQL
Oracle má vyhrazená paměťová místa pro provádění příkazů SQL a poté uchovává zpracované informace, například , celkový počet aktualizovaných řádků.
Kurzor v PL / SQL dává název a funguje jako ukazatel na oblast práce zvanou kontextová oblast a poté používá její informace. Udržuje počet řádků zpracovaných příkazem SQL. Tyto řádky se nazývají jako aktivní sada. Velikost aktivní sady se rovná počtu řádků, které splňují podmínku.
Níže jsou uvedeny dva typy kurzorů:
- Implicitní kurzor
- Explicitní kurzor
Implicitní kurzory
Implicitní kurzory jsou Oracle standardně přidělovány při provádění příkazů SQL. Obsahuje ovlivněné řádky pomocí operací DML, jako jsou UPDATE, DELETE a INSERT. Implicitní kurzory se tedy používají, když nemáme zaveden explicitní kurzor.
Zatímco vkládáme řádek, kurzor udržuje konkrétní data. Podobně pro operace odstranění a aktualizace jsou ovlivněné řádky uloženy kurzory. Implicitní kurzory nemají žádná jména, a proto s nimi vývojáři nemohou manipulovat a data na nich obsažená nelze nikde použít.
Nejnovější aktualizované kurzory lze použít pomocí atributů kurzoru. Tyto atributy jsou vlastnosti, které pomáhají odkazovat na datový typ a strukturu položek bez opakování jejich definic. Všechny sloupce a tabulky v databázi mají společný atribut (představovaný znakem%) a lze je použít jako sql% název_atributu.
Sl č. | název | Účely |
---|---|---|
7 | DÉLKA (m) | Vrátí počet znaků v řetězci m. |
1 | %NALEZENO | Výsledek dává booleovský. Vrátí true, pokud příkazy DELETE, INSERT, UPDATE nebo SELECT ovlivní jeden nebo více řádků. Nebo je vrácena hodnota false. |
dva | %NENALEZENO | Dává výsledek v booleovské a má reverzní funkčnost% FOUND. Vrátí true, pokud příkazy DELETE, INSERT, UPDATE nebo SELECT neovlivní žádné řádky. Nebo je vrácena hodnota false. |
3 | %JE OTEVŘENO | Výsledek dává booleovský. Vrátí hodnotu true, pokud je kurzor aktuálně otevřený. Nebo je vrácena hodnota false. |
4 | % ROWCOUNT | Udává počet řádků načtených z příkazů DELETE, INSERT, UPDATE nebo SELECT. |
5 | %TYP | Poskytuje datový typ sloupce nebo proměnné databáze. |
6 | % ROWTYPE | Poskytuje typ záznamu, který je ekvivalentní řádku databáze. |
Uvažujme o tabulce s názvem TUTOR.
SELECT * FROM TUTOR;
Vytvořili jsme tabulku s níže uvedeným příkazem SQL:
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
Vloženy hodnoty do této tabulky s níže uvedenými příkazy SQL:
INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (1, 'Automation', 'Mukul', 'five stars'); INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (4, 'PLSQL', 'Anand', 'four stars'); INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (2, 'Performance', 'Arvind', 'four stars');
Implementace kódu pomocí implicitního kurzoru:
DECLARE total_count number(30); BEGIN --updating a row UPDATE TUTOR SET TEACHER = 'Zen' where CODE = 1; -- result in boolean, true returned if no rows affected IF sql%notfound THEN dbms_output.put_line('no subjects fetched'); -- result in boolean, true returned if any rows affected ELSIF sql%found THEN -- count the number of rows affected rows affected total_count := sql%rowcount; dbms_output.put_line( total_count || ' teacher name updated '); END IF; END; /
Výstup z výše uvedeného kódu by měl být:
Pojďme nyní ověřit změny projevené v tabulce s názvem TUTOR.
K získání sloupců tabulky používáme příkaz SQL:
SELECT * FROM TUTOR;
Vidíme tedy, že jak ukazuje kurzor, jméno učitele s kódem = 1 se aktualizuje na Zen.
Explicitní kurzory
Vývojáři mohou mít vlastní uživatelsky definovanou kontextovou oblast pro spouštění operací DML. Mohou tak nad tím vykonávat větší moc. Sekce deklarace bloku PL / SQL kódu obsahuje explicitní kurzory. Normálně je postaven na operacích SELECT, které načtou více řádků.
Syntaxe explicitního kurzoru:
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
Explicitní kurzor pracuje na procesech uvedených níže:
# 1) Deklarace kurzoru pro inicializaci paměti. Zde se vytvoří pojmenovaná kontextová oblast, která slouží jako název kurzoru.
Syntax:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#dva) Otevírání kurzoru pro alokaci paměti . Nyní je k dispozici kurzor pro načítání aktualizovaných řádků z databáze.
Syntax:
OPEN tutorial_s;
# 3) Kurzor se načte pro získání dat. Po dokončení operace SELECT se získané řádky vloží do přidělené paměti a tyto se nyní považují za aktivní sady. Kurzor může přistupovat po jednom řádku.
Syntax:
FETCH tutorial_s INTO c_code;
# 4) Kurzor je konečně uzavřen, aby se uvolnila přidělená paměť. Protože se všechny záznamy získávají jeden po druhém, kurzor se zavře, aby se uvolnila paměť kontextové oblasti.
Syntax:
CLOSE tutorial_s;
Implementace kódu s explicitním kurzorem:
DECLARE -- cursor declaration CURSOR t_tutorials is SELECT code, subject, teacher FROM Tutor; t_code Tutor.code%type; t_subject Tutor.subject%type; t_teacher Tutor.teacher%type; BEGIN -- opening a cursor OPEN t_tutorials; LOOP -- fetching values from cursor FETCH t_tutorials into t_code, t_subject, t_teacher; EXIT WHEN t_tutorials%notfound; -- printing in console dbms_output.put_line('Code is: ' || t_code || ' ' || 'Subject is: ' || t_subject || ' Teacher is: ' || t_teacher); END LOOP; CLOSE t_tutorials; END; /
Výstup z výše uvedeného kódu by měl být:
Kurzor pro smyčku
Při práci s explicitními kurzory můžeme použít smyčku FOR namísto použití příkazů jako FETCH, OPEN a CLOSE. Cursor FOR Loop má index smyčky jako záznam, který ukazuje na řádek získaný z databáze. Dále po otevření kurzoru opakovaně načte několik řádků dat ze sady výsledků do polí záznamu.
Nakonec se kurzor zavře po získání všech řádků. Pro odkaz na každé pole v záznamu používáme znaménko tečka (.). Znaménko (.) tečka se ve skutečnosti používá pro výběr komponenty.
Syntaxe smyčky Cursor For:
DECLARE CURSOR c IS SELECT code, subject, price FROM Tutorial; ... BEGIN FOR Tutorial_rec IN c LOOP ... price_sum:= price_sum + Tutorial_rec.price; END LOOP;
Zde smyčka Cursor FOR deklaruje „ Tutorial_rec “ jako záznam.
Proměnný kurzor
Proměnná kurzoru se používá k označení aktuálního řádku ve výsledkové sadě, která má více než jeden řádek. Lze jej použít pro jakýkoli typ dotazu. Je to podobné jako s proměnnou PL / SQL, kde můžeme přiřadit hodnoty a lze je předávat prostřednictvím podprogramu v databázi. Proměnné kurzoru tak poskytují velkou flexibilitu a data lze získat v centralizovaném procesu.
Řetězce PL SQL
Řetězce v PL / SQL je skupina znaků v určitém pořadí. Velikost řetězce může, ale nemusí být k dispozici. Znaky, které mohou být součástí řetězce, mohou být speciální znaky, mezery, čísla a alfanumerické znaky. Jedná se tedy o sadu vybraných symbolů ze skupiny znaků.
V PL / SQL existují tři kategorie řetězců. Jsou uvedeny níže:
- Řetězec s proměnnou délkou: Délka řetězce nesmí překročit 32 767 a řetězec nemůže být polstrován.
- Řetězec s pevnou délkou : Délka řetězce je uvedena v deklaraci řetězce. Řetězec je vpravo polstrovaný mezerami, aby se přizpůsobila zadané délce řetězce.
- Znakové velké objekty (CLOB): Jedná se o řetězec s proměnnou délkou, který má velikost až 128 TB.
Řetězce v PL / SQL mohou být literály nebo proměnné. Symboly nabídek se používají pro literály.
Syntax:
'This is Software Testing Help'
Také máme možnost přidat nabídku do našeho řetězcového literálu. Toho je dosaženo udržováním dvou po sobě jdoucích jednoduchých uvozovek.
Syntax:
'We can''t go there'
Můžeme popsat uživatelem definované oddělovače řetězcového literálu tak, že jej předpíšeme písmenem „q“.
Syntax:
q'(We can't go there)'
Deklarace řetězcových proměnných
V PL / SQL existuje více datových typů jako NCHAR, CHAR, VARCHAR, VARCHAR2, CLOB a NCLOB. Datové typy národní znakové sady mají předponu N. Používají se k ukládání znaků Unicode.
V řetězci s proměnnou délkou by měl být uveden maximální limit délky řetězce.
Syntax:
DECLARE subject varchar(10);
To znamená, že proměnný předmět je schopen pojmout až 10 znaků a ne více než to. V případě, že je vynechána maximální délka, je vyvolána chyba kompilace.
V řetězci s pevnou délkou lze použít datový typ CHAR. Není nutné definovat maximální délku řetězce pevné délky. Pokud je limit vynechán, Oracle použije výchozí hodnotu 1.
Syntax:
DECLARE subject char := 'P';
Pokud deklarujete proměnnou CHAR s délkou přesahující 1, Oracle ve výchozím nastavení vyplní hodnotu, kterou jsme do této proměnné uložili mezerami. To se provádí, dokud není dosaženo zadané maximální délky.
K vytvoření deklarace pro velký znakový objekt se používá CLOB. Zde není třeba uvádět maximální délku a délku stanoví samotná databáze Oracle a závisí na velikosti databázového bloku.
Syntax:
DECLARE l CLOB;
Pokyny pro výběr datových typů v PL / SQL:
- Pokud máme co do činění s hodnotami, které mají vždy pevnou délku, například, číslo mobilního telefonu, které má konstantní délku a formát, měli bychom použít datový typ CHAR nebo NCHAR.
- Jinak bychom měli používat datový typ VARCHAR2 nebo NVARCHAR2.
- Pokud máme co do činění s řetězcem, který má více než 32 767 znaků, měli bychom použít datový typ CLOB nebo NCLOB.
Implementace kódu pomocí řetězců:
DECLARE subject varchar2(30); teacher varchar2(40); syllabus clob; options char(1); BEGIN -- Initializing values to variables subject := 'Selenium'; teacher := 'Arun'; syllabus := 'Java, WebDriver Methods, Synchronization, WebTables.'; options := 'S'; -- checking condition and if true IF options = 'S' THEN -- printing in console dbms_output.put_line(subject); dbms_output.put_line(teacher); dbms_output.put_line(syllabus); END IF; END; /
Výstup z výše uvedeného kódu by měl být:
Funkce PL / SQL a operátoři v řetězci
Sl č. | název | Účely |
---|---|---|
1 | CONCAT (i, j) | Připojí řetězce i a j a vrátí nový řetězec. |
dva | ASCII (n) | Vrátí ekvivalentní hodnotu ASCII n. |
3 | CHR (n) | Vrátí znak spolu s ekvivalentní hodnotou ASCII n. |
4 | INSTR (i, x, start, n) | Vyhledá podřetězec i v řetězci x a poté vrátí pozici výskytu. Počátek odkazuje na počáteční pozici vyhledávání a je volitelným parametrem. N je n-tý výskyt řetězce a je také volitelným parametrem. |
5 | INSTRB (i) | Vrátí pozici podřetězce v řetězci v bajtech. |
6 | INITCAP (k) | Převede počáteční znak jednotlivých slov v řetězci k na velká písmena a poté vrátí řetězec. |
8 | DÉLKA (n) | Vrátí počet znaků v řetězci m v bajtech pro jednobajtovou znakovou sadu. |
9 | LTRIM (n, x) | Odstraní x znaků zleva od řetězce n. X je volitelný parametr, pokud není k dispozici, odstraní všechny úvodní mezery řetězce n. |
10 | RTRIM (n, x) | Odstraní x znaků zprava od řetězce n. X je volitelný parametr, pokud není k dispozici, odstraní všechny koncové mezery řetězce n. |
jedenáct | TRIM ((trim_char FROM) x); | Odstraní mezery nebo zmíněné znaky od začátku, konce nebo obou konců řetězce x. |
12 | DOLNÍ (i) | Převede znaky řetězce i na malá písmena a poté vrátí řetězec. |
13 | HORNÍ (i) | Převede znaky řetězce i na velká písmena a poté vrátí řetězec. |
14 | LPAD (i, l, x) | Vycpávejte řetězec x doleva, aby řetězec byl dlouhý i na l. Parametr x je volitelný, pokud jsou vynechané mezery vyplněny nalevo od řetězce i. |
patnáct | RPAD (i, l, x) | Vycpávejte řetězec x doprava, aby řetězec byl dlouhý i na l. Parametr x je volitelný, pokud jsou vynechané mezery vyplněny napravo od řetězce i. |
16 | NANVL (n, val) | Vrátí val, pokud n se rovná hodnotě NaN, jinak se vrátí n. |
17 | NLSSORT (i) | Upravuje metodu řazení znaků. Mělo by to být uvedeno před jakoukoli funkcí NLS, jinak bude provedeno výchozí třídění. |
18 | NLS_INITCAP (i) | Podobně funkční jako funkce INITCAP, ale může to vyžadovat jiný druh techniky, jak je uvedeno ve funkci NLSSORT. |
19 | NLS_LOWER (m) | Podobná funkcionalita jako funkce LOWER, ale může to vyžadovat jiný druh techniky, jak je uvedeno ve funkci NLSSORT. |
dvacet | NLS_UPPER (m) | Podobně funkční jako funkce UPPER, ale může to vyžadovat jiný druh techniky, jak je uvedeno ve funkci NLSSORT. |
dvacet jedna | NVL (n, val) | Vrátí val, pokud x je rovno hodnotě NULL, jinak je vráceno n. |
22 | NVL2 (n, val, val2) | Vrátí val, pokud x není rovno hodnotě NULL, jinak je-li x rovno NULL, je vrácena val2. |
2. 3 | SOUNDEX (i) | Vrátí řetězec mající hlasovou reprezentaci i. |
24 | SUBSTR (n, start, l) | Vrátí podřetězec řetězce n, který začíná od pozice uvedené v začátku. Parametr l je volitelný a představuje délku podřetězce. |
25 | SUBSTRB (n) | Podobná funkčnost jako funkce SUBSTR, ale parametry jsou v bajtech a ne ve znacích pro jednobajtový znakový systém. |
26 | REPLACE (n, s, r) | Nahradí výskyty s řetězcem r v řetězci n. |
Implementace kódu s některými řetězcovými funkcemi:
DECLARE name varchar2(30) := ' software testing help!'; BEGIN dbms_output.put_line(UPPER(name)); dbms_output.put_line(LOWER(name)); dbms_output.put_line(LENGTH(name)); dbms_output.put_line(INITCAP(name)); /* get the first word in the string */ dbms_output.put_line ( SUBSTR (name, 1, 8)); /* get the location of the first 'w' */ dbms_output.put_line ( INSTR (name, 'w')); /* replace a string */ dbms_output.put_line ( REPLACE( name, 'help', 'solution')); /* trim a string from right */ dbms_output.put_line ( RTRIM(name,'!')); /* trim a string */ dbms_output.put_line ( TRIM(name)); END; /
Výstup z výše uvedeného kódu by měl být:
samostatná hash tabulka řetězení c ++
Vysvětlení výše uvedeného kódu:
- První výstup je NÁPOVĚDA TESTOVÁNÍ SOFTWARU !. Vrátí vstupní řetězec „Nápověda k testování softwaru!“ v horním případě pomocí HORNÍ funkce.
- Druhý výstup je Nápověda k testování softwaru !. Vrátí vstupní řetězec NÁPOVĚDA TESTOVÁNÍ SOFTWARU! malými písmeny pomocí funkce LOWER.
- Třetí výstup 2. 3 . Vrátí délku vstupního řetězce pomocí Funkce LENGTH.
- Čtvrtý výstup je Nápověda k testování softwaru !. Vrátí první znak každého slova vstupního řetězce velkými písmeny pomocí Funkce INITCAP .
- Pátý výstup je software. Vrátí podřetězec vstupního řetězce z první pozice na délku 8 včetně mezery pomocí Funkce SUBSTR .
- Šestý výstup je 6. Vrátí pozici v ve vstupním řetězci pomocí Funkce INSTR .
- Sedmý výstup je řešení pro testování softwaru !. Vrátí nový řetězec nahrazením Pomoc s řešení ve vstupním řetězci pomocí REPLACE funkce .
- Osmý výstup je nápověda k testování softwaru. Vrátí nový řetězec oříznutím znaku ! zprava od vstupního řetězce pomocí Funkce RTRIM .
- Devátý výstup je Nápověda k testování softwaru !. Vrátí nový řetězec oříznutím předních a koncových mezer ze vstupního řetězce pomocí Funkce TRIM .
Často kladené otázky a odpovědi
Otázka č. 1) Co je kurzor v PL / SQL?
Odpovědět: Po provedení příkazu SQL vytvoří databáze Oracle paměť nazvanou kontextová oblast. Kurzor má informace zpracované z příkazu select a obsahuje řádky aktualizované touto operací SELECT.
Otázka 2) Co je kurzor a typ kurzoru?
Odpovědět: Po provedení příkazu SQL vytvoří databáze Oracle paměť nazvanou kontextová oblast, což je dočasná pracovní oblast. Existují dvě kategorie kurzorů - implicitní kurzor a explicitní kurzor.
Otázka č. 3) Jak spustím kurzor v Oracle?
Odpovědět: Chcete-li spustit kurzor v Oracle, je to syntaxe: OTEVŘENO<> . CURSORNAME odkazuje na název kurzoru, který je k dispozici v sekci deklarace bloku kódu PL / SQL.
Otázka č. 4) Můžeme prohlásit, že kurzor uvnitř začíná?
Odpovědět: Ano, můžeme deklarovat více než jeden kurzor v rámci bloku PL / SQL kódu.
Otázka č. 5) Jak zjistíte délku řetězce v PL / SQL?
Odpovědět: Můžeme najít délku řetězce v PL / SQL pomocí funkce LENGTH (str). Zde str je řetězec, pro který chceme získat délku. Tato funkce vrací číselnou hodnotu.
Otázka č. 6) Co je SUBSTR v Oracle?
Odpovědět: Funkce SUBSTR dává určitý počet znaků ze specifické pozice řetězce. Syntaxe je SUBSTR (n, start, l). Vrátí podřetězec z řetězce n, který začíná od pozice uvedené na začátku. Parametr l je volitelný a představuje délku podřetězce.
Závěr
V tomto tutoriálu jsme podrobně diskutovali o některých základních pojmech PL / SQL.
Pokryli jsme následující témata uvedená níže:
- PL SQL Cursor: Implicitní kurzor a explicitní kurzor
- Řetězce PL / SQL.
- Funkce a operátoři v řetězci.
<< PREV Tutorial | DALŠÍ výukový program >>
Doporučené čtení
- Výukový program PL SQL pro začátečníky s příklady | Co je to PL / SQL
- Výukový program Java Array Length s příklady kódu
- Výukový program pro zpracování výjimek C # s příklady kódu
- Java „toto“ klíčové slovo: Výukový program s příklady kódu
- Výukový program Python DateTime s příklady
- Použití kurzoru v MongoDB s příklady
- Výukový program pro funkce / metody C # s příklady kódu
- MySQL Create View Tutorial s příklady kódu