pl sql cursor strings
I denna handledning lär vi oss vad som är en PL SQL-markör och relaterade begrepp som Implicita och Explicita markörer, markör för loop etc. Vi kommer också att lära oss om strängfunktioner i PL / SQL:
I PL SQL-samlingar handledning av PL / SQL-serien , vi lärde oss om insamlingsmetoder, Varray, nestad tabell och associativ matris med hjälp av kodexempel.
I den här artikeln kommer vi att undersöka de olika typerna av markörer som PL / SQL har. Vi kommer också att se implementeringen av olika typer av markörer med kodexempel.
Vi ska också diskutera strängar och några av de inbyggda strängfunktionerna tillgängliga i PL / SQL.
hur man blir en ledarbok
Vad du kommer att lära dig:
PL SQL-markör
Oracle har dedikerade minnesplatser för att köra SQL-uttalanden och sedan håller den den bearbetade informationen, till exempel , det totala antalet rader uppdaterade.
En markör i PL / SQL ger ett namn och fungerar som en pekare till arbetsområdet som kallas ett kontextområde och använder sedan dess information. Det håller antalet rader som bearbetas av SQL-satsen. Dessa rader kallas som en aktiv uppsättning. Storleken på den aktiva uppsättningen är lika med antalet rader som uppfyller villkoret.
Det finns två typer av markörer som listas nedan:
- Implicit markör
- Explicit markör
Implicita markörer
De implicita markörerna allokeras av Oracle som standard medan SQL-uttalanden körs. Den innehåller de drabbade raderna av DML-operationerna som UPDATE, DELETE och INSERT. Således används implicita markörer när vi inte har en uttrycklig markör på plats.
Medan vi sätter in en rad behåller markören just den informationen. På samma sätt lagras de berörda raderna för markering och uppdatering av markörerna. De implicita markörerna får inga namn och kan därför inte manipuleras av utvecklarna och informationen på den kan inte användas någonstans.
De senaste uppdaterade markörerna kan användas med hjälp av markörattribut. Dessa attribut är egenskaperna som hjälper till att hänvisa till datatyp och struktur för artiklar utan att upprepa deras definitioner. Alla kolumner och tabeller i en databas har ett gemensamt attribut (representerat av% tecken) och de kan användas som sql% attributnamn.
Sl No. | namn | Syften |
---|---|---|
7 | LÄNGD (m) | Returnerar antalet tecken i sträng m. |
1 | %HITTADES | Ger resultatet på booleska. Returnerar true om DELETE, INSERT, UPDATE eller SELECT-uttalanden påverkar enstaka eller flera rader. Annars returneras falskt. |
två | %HITTADES INTE | Ger resultatet i boolean och har omvänd funktionalitet på% FOUND. Returnerar true om DELETE-, INSERT-, UPDATE- eller SELECT-påståenden påverkar inga rader. Annars returneras falskt. |
3 | %ÄR ÖPPEN | Ger resultatet på booleska. Returnerar sant om markören för närvarande är öppen. Annars returneras falskt. |
4 | % ROWCOUNT | Ger antalet rader som hämtats från DELETE, INSERT, UPDATE eller SELECT-uttalanden. |
5 | %TYP | Ger datatypen för kolumnen eller variabeln i databasen. |
6 | % ROWTYPE | Ger den posttyp som motsvarar en databaserad. |
Låt oss överväga en tabell som heter TUTOR.
SELECT * FROM TUTOR;
Vi har skapat en tabell med SQL-uttalandet nedan:
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
Infogade värden i denna tabell med SQL-uttalanden nedan:
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');
Kodimplementering med den implicita markören:
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; /
Utgången för ovanstående kod ska vara:
Låt oss nu verifiera ändringarna som återspeglas i tabellen med namnet TUTOR.
Vi använder ett SQL-uttalande för att få kolumnerna i tabellen:
SELECT * FROM TUTOR;
Således ser vi att som pekad av markören uppdateras namnet på läraren med kod = 1 till Zen.
Explicita markörer
Utvecklarna kan ha sitt eget användardefinierade kontextområde för att köra DML-operationer. Således kan de utöva mer makt över det. Deklarationsavsnittet i PL / SQL-kodblocket innehåller uttryckliga markörer. Det bygger normalt på SELECT-operationer som hämtar flera rader.
Syntax för explicit markör:
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
Explicit Cursor arbetar med de processer som anges nedan:
# 1) Markörförklaring för initialisering av minne. Här skapas ett namngivet sammanhangsområde som fungerar som markörnamn.
Syntax:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#två) Marköröppning för minnesallokering . En markör är nu tillgänglig för att hämta de uppdaterade raderna från databasen.
Syntax:
OPEN tutorial_s;
# 3) Markören hämtas för att få data. När SELECT-operationen är klar placeras de erhållna raderna i det tilldelade minnet och dessa betraktas nu som aktiva uppsättningar. Markören kan komma åt en rad i taget.
Syntax:
FETCH tutorial_s INTO c_code;
# 4) Markören är äntligen stängd för att frigöra det tilldelade minnet. Eftersom alla poster erhålls en efter en stängs markören för att frigöra kontextområdesminne.
Syntax:
CLOSE tutorial_s;
Kodimplementering med tydlig markör:
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; /
Utgången för ovanstående kod ska vara:
Markör för slinga
När vi arbetar med tydliga markörer kan vi använda FOR-loop istället för att använda uttalanden som FETCH, OPEN och CLOSE. Cursor FOR Loop har loopindex som en post som pekar på raden som erhållits från databasen. Nästa efter att markören har öppnats hämtar den flera rader med data flera gånger från resultatuppsättningen till postfälten.
Slutligen stängs markören efter att alla rader erhållits. Vi använder ett punkt (.) För att referera till varje fält i posten. (.) dot-tecknet används faktiskt för att välja en komponent.
Syntaksen för Cursor For loop:
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;
Här förklarar Cursor FOR-slingan ” Tutorial_rec ' som rekord.
Markör för variabler
En markörvariabel används för att referera till den aktuella raden i resultatuppsättningen som har mer än en rad. Den kan användas för alla typer av frågor. Det liknar en variabel av PL / SQL, där vi kan tilldela värden och kan skickas via ett underprogram i databasen. Markörvariabler ger således mycket flexibilitet och data kan erhållas i en centraliserad process.
PL SQL-strängar
Strängarna i PL / SQL är en grupp tecken i en viss ordning. Strängens storlek kanske inte är tillgänglig. Tecknen som kan vara en del av en sträng kan vara ett specialtecken, tomma, siffror och alfanumeriska tecken. Således är det en uppsättning valda symboler från en grupp tecken.
Det finns tre strängkategorier i PL / SQL. Dessa listas nedan:
- Sträng med variabel längd: Strängens längd får inte överstiga 32 767 och det kan inte finnas någon stoppning i strängen.
- Fast längdsträng : Strängens längd nämns i strängdeklarationen. Strängen är vadderad med mellanrum för att passa strängens angivna längd.
- Character Large Objects (CLOB): Detta är en sträng med variabel längd som har en storlek upp till 128 TB.
Strängarna i PL / SQL kan vara antingen bokstäver eller variabler. Citatsymboler används för bokstäver.
Syntax:
'This is Software Testing Help'
Vi har också möjlighet att lägga till en offert i vår sträng bokstavliga. Detta uppnås genom att hålla två på varandra följande citat.
Syntax:
'We can''t go there'
Vi kan beskriva användardefinierade avgränsare för stränglitterär genom att prefixa den med en 'q' -bokstav.
Syntax:
q'(We can't go there)'
Strängvariabler deklaration
Det finns flera datatyper i PL / SQL som NCHAR, CHAR, VARCHAR, VARCHAR2, CLOB och NCLOB. De nationella teckenuppsättningens datatyper är prefixade med N. De används för att lagra Unicode-tecken.
I en sträng med variabel längd bör den maximala gränsen för stränglängden nämnas.
Syntax:
DECLARE subject varchar(10);
Detta betyder att det variabla ämnet kan rymma upp till 10 tecken och inte mer än så. I det fall där den maximala längden utelämnas kastas kompileringsfel.
I en sträng med fast längd kan CHAR-datatypen användas. Det är inte nödvändigt att definiera den maximala längden på en sträng med fast längd. Om gränsen utelämnas tar Oracle standardvärdet 1.
Syntax:
DECLARE subject char := 'P';
Om du förklarar en CHAR-variabel med längden som överstiger 1, kläddar Oracle som standard värdet som vi har lagrat till variabeln med mellanslag. Detta görs tills den angivna maximala längden har uppnåtts.
För att göra en deklaration för ett stort tecken används CLOB. Den maximala längden behöver inte nämnas här och längden ställs in av Oracle-databasen själv och beror på storleken på databasblocket.
Syntax:
DECLARE l CLOB;
Riktlinjer för att välja datatyper i PL / SQL:
- Om vi har att göra med värden som alltid har en fast längd, till exempel, mobilnumret som har konstant längd och format, bör vi använda datatypen CHAR eller NCHAR.
- Annars ska vi använda VARCHAR2 eller NVARCHAR2 datatyp.
- Om vi har att göra med en sträng som har mer än 32 767 tecken bör vi använda datatypen CLOB eller NCLOB.
Kodimplementering med strängar:
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; /
Utgången för ovanstående kod ska vara:
PL / SQL-funktioner och operatörer i sträng
Sl No. | namn | Syften |
---|---|---|
1 | CONCAT (i, j) | Lägger till strängarna i och j och returnerar den nya strängen. |
två | ASCII (n) | Returnerar motsvarande ASCII-värde av n. |
3 | CHR (n) | Returnerar tecknet tillsammans med motsvarande ASCII-värde på n. |
4 | INSTR (i, x, start, n) | Hitta strängen i i x-strängen och returnerar sedan förekomstpositionen. Starten avser sökningens startposition och är en valfri parameter. N är strängens n: a förekomst och är också en valfri parameter. |
5 | INSTRB (i) | Returnerar en substrings position i en sträng i byte. |
6 | INITCAP (k) | Konverterar den inledande karaktären för enskilda ord i sträng k till versaler och ger sedan tillbaka strängen. |
8 | LÄNGD (n) | Returnerar antalet tecken i sträng m i byte för enstaka byte teckenuppsättning. |
9 | LTRIM (n, x) | Tar bort x tecken från vänster om sträng n. X är en valfri parameter om den inte tillhandahålls, tar bort alla ledande mellanslag i strängen n. |
10 | RTRIM (n, x) | Tar bort x-tecken från höger om sträng n. X är en valfri parameter om den inte tillhandahålls, tar bort alla efterföljande utrymmen i strängen n. |
elva | TRIM ((trim_char FROM) x); | Tar bort blanksteg eller nämnda tecken från början, slutet eller båda ändarna av strängen x. |
12 | LÄGRE (i) | Konverterar tecknen i sträng i till gemener och returnerar sedan strängen. |
13 | ÖVRE (i) | Konverterar tecknen i sträng i till versaler och returnerar sedan strängen. |
14 | LPAD (i, l, x) | Pads sträng x till vänster för att göra strängen i längd till l. Parametern x är valfri om utelämnade mellanslag är vadderade till vänster om sträng i. |
femton | RPAD (i, l, x) | Pads sträng x till höger för att göra strängen i längd till l. Parametern x är valfri om utelämnade mellanslag är vadderade till höger om sträng i. |
16 | NANVL (n, val) | Returnerar val om n är lika med NaN-värdet, annars returneras n. |
17 | NLSSORT(i) | Ändrar sorteringsmetoden för tecken. Det bör nämnas före vilken NLS-funktion som helst, annars görs standardsorteringen. |
18 | NLS_INITCAP (i) | Liknande funktionalitet som funktion INITCAP men det kan ta en annan typ av teknik som nämns i funktion NLSSORT. |
19 | NLS_LOWER (m) | Liknande funktionalitet som funktion LÄGRE men det kan ta en annan typ av teknik som nämns i funktion NLSSORT. |
tjugo | NLS_UPPER (m) | Liknande funktionalitet som funktion UPPER men det kan ta en annan typ av teknik som nämnts i funktionen NLSSORT. |
tjugoett | NVL (n, val) | Returnerar val om x är lika med NULL-värdet, annars returneras n. |
22 | NVL2 (n, val, val2) | Returnerar val om x inte är lika med NULL-värdet, annars om x är lika med NULL returneras val2. |
2. 3 | SOUNDEX (i) | Returnerar en sträng med vokalrepresentationen av i. |
24 | SUBSTR (n, start, l) | Returnerar en delsträng av sträng n som börjar från den position som nämns i start. Parametern l är valfri och representerar längden på underlaget. |
25 | SUBSTRB (n) | Liknande funktionalitet som funktion SUBSTR men parametrar finns i byte och inte i tecken för ett enda byte-karaktärssystem. |
26 | Byt ut (n, s, r) | Ersätter förekomsten av s med strängen r med i strängen n. |
Kodimplementering med några strängfunktioner:
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; /
Utgången för ovanstående kod ska vara:
hur man öppnar en .jar-fil windows 10
Förklaring till ovanstående kod:
- Den första utgången är PROGRAMVARA TESTHJÄLP !. Returnerar inmatningssträngen ”Hjälp med programvarutestning!” i övre fall med hjälp av UPPER-funktion.
- Den andra utgången är hjälp med programvarutestning !. Returnerar inmatningssträngen PROGRAMVARA TESTHJÄLP! i gemener med hjälp av LOWER-funktionen.
- Den tredje utgången 2. 3 . Returnerar längden på inmatningssträngen med hjälp av LÄNGD-funktion.
- Den fjärde utgången är Software Testing Help !. Returnerar det första tecknet i varje ord i inmatningssträngen i gemener med hjälp av INITCAP-funktion .
- Den femte utgången är softwar. Returnerar en delsträng av inmatningssträngen från den första positionen till en längd av 8 inklusive ett mellanslag med hjälp av SUBSTR-funktion .
- Den sjätte utgången är 6. Returnerar positionen för i i inmatningssträngen med hjälp av INSTR-funktion .
- Den sjunde produktionen är programvarutestningslösning !. Returnerar en ny sträng genom att ersätta den hjälp med lösning i inmatningssträngen med hjälp av REPLACE fungera .
- Den åttonde utgången är hjälp med testning av programvara. Returnerar en ny sträng genom att beskära karaktären ! från höger om inmatningssträngen med hjälp av RTRIM-funktion .
- Den nionde utgången är hjälp med programvarutestning !. Returnerar en ny sträng genom att trimma de ledande och efterföljande utrymmena från inmatningssträngen med hjälp av TRIM-funktion .
Vanliga frågor och svar
F # 1) Vad är markören i PL / SQL?
Svar: När ett SQL-uttalande har körts bygger Oracle-databasen ett minne som kallas kontextområde. En markör behandlar informationen från ett valt uttalande och innehåller raderna uppdaterade av den SELECT-åtgärden.
F # 2) Vad är en markör och typ av markör?
Svar: Efter att ett SQL-uttalande har körts bygger Oracle-databasen ett minne som kallas kontextområde som är ett tillfälligt arbetsområde. Det finns två kategorier av markörer - Implicit markör och Explicit markör.
F # 3) Hur kör jag en markör i Oracle?
Svar: För att köra en markör i Oracle är syntaxen: ÖPPEN<> . CURSORNAME hänvisar till namnet på markören som är tillgänglig i deklarationsavsnittet i PL / SQL-kodblocket.
F # 4) Kan vi deklarera markören inuti?
Svar: Ja, vi kan deklarera mer än en markör inom ett PL / SQL-kodblock.
F # 5) Hur hittar du längden på en sträng i PL / SQL?
Svar: Vi kan hitta längden på en sträng i PL / SQL med hjälp av funktionen LENGTH (str). Här är str den sträng som vi vill få längden för. Denna funktion returnerar ett numeriskt värde.
F # 6) Vad är SUBSTR i Oracle?
Svar: SUBSTR-funktionen ger ett visst antal tecken från en specifik position i en sträng. Syntaxen är SUBSTR (n, start, l). Den returnerar en delsträng från strängen n som börjar från den position som nämns i start. Parametern l är valfri och representerar längden på underlaget.
Slutsats
I denna handledning har vi diskuterat i detalj några av de grundläggande begreppen PL / SQL.
Vi har täckt följande ämnen som listas nedan:
- PL SQL Cursor: Implicit Cursor and Explicit Cursor
- PL / SQL-strängar.
- Funktioner och operatörer i sträng.
<< PREV Tutorial | NÄSTA självstudie >>
Rekommenderad läsning
- PL SQL-handledning för nybörjare med exempel | Vad är PL / SQL
- Java Array Length Tutorial With Code Exempel
- C # Handledning för undantagshantering med kodexempel
- Java 'detta' Nyckelord: Handledning med kodexempel
- Python DateTime-handledning med exempel
- Användning av markören i MongoDB med exempel
- C # -funktioner / metodhandledning med kodexempel
- MySQL Skapa vyhandledning med kodexempel