pl sql cursor strings
I denne opplæringen vil vi lære hva som er en PL SQL-markør og relaterte konsepter som implisitte og eksplisitte markører, markør for løkke osv. Vi vil også lære om strengfunksjoner i PL / SQL:
I PL SQL-samlinger opplæring av PL / SQL-serien , lærte vi om samlingsmetoder, Varray, nestet tabell og assosiativ matrise ved hjelp av kodeeksempler.
I denne artikkelen vil vi utforske de forskjellige typene markører som PL / SQL har. Vi vil også se implementeringen av forskjellige typer markører med kodeeksempler.
Vi skal også diskutere strenger og noen av de innebygde strengfunksjonene som er tilgjengelige i PL / SQL.
hvordan du velger alternativknapp i selen
Hva du vil lære:
PL SQL-markør
Oracle har dedikerte minneplasser for å utføre SQL-setninger, og deretter har den den bearbeidede informasjonen, for eksempel , totalt antall rader oppdatert.
En markør i PL / SQL gir et navn og fungerer som en peker til arbeidsområdet som kalles et kontekstområde og bruker deretter informasjonen. Det holder antall rader behandlet av SQL-setningen. Disse radene kalles som et aktivt sett. Størrelsen på det aktive settet er lik antall rader som oppfyller betingelsen.
Det er to typer markører som er oppført nedenfor:
- Implisitt markør
- Eksplisitt markør
Implisitte markører
De implisitte markørene tildeles av Oracle som standard mens du kjører SQL-setninger. Den inneholder de berørte radene av DML-operasjonene som UPDATE, DELETE og INSERT. Dermed brukes implisitte markører når vi ikke har en eksplisitt markør på plass.
Mens vi setter inn en rad, beholder markøren de spesifikke dataene. Tilsvarende lagres de berørte radene av markørene for sletting og oppdatering av operasjoner. De implisitte markørene får ikke noen navn og kan derfor ikke manipuleres av utviklerne, og dataene på den kan ikke brukes hvor som helst.
De siste oppdaterte markørene kan brukes ved hjelp av markørattributter. Disse attributtene er egenskapene som hjelper til med å referere til datatype og struktur for varer uten å gjenta definisjonene. Alle kolonnene og tabellene i en database har et felles attributt (representert ved% sign) -egenskaper, og de kan brukes som sql% attributtnavn.
Sl nr. | Navn | Formål |
---|---|---|
7 | LENGDE (m) | Returnerer antall tegn i streng m. |
1 | %FUNNET | Gir resultatet på boolsk. Returnerer sant hvis DELETE, INSERT, UPDATE eller SELECT-setninger påvirker enkle eller flere rader. Ellers returneres falskt. |
to | %IKKE FUNNET | Gir resultatet på boolsk og har omvendt funksjonalitet på% FOUND. Returnerer sant hvis DELETE, INSERT, UPDATE eller SELECT-setninger påvirker ingen rader. Ellers returneres falskt. |
3 | %ER ÅPEN | Gir resultatet på boolsk. Returnerer sant hvis markøren er åpen for øyeblikket. Ellers returneres falskt. |
4 | % ROWCOUNT | Gir antall antall rader hentet fra DELETE, INSERT, UPDATE eller SELECT-setninger. |
5 | %TYPE | Gir datatypen for kolonnen eller variabelen i databasen. |
6 | % ROWTYPE | Gir posttypen som tilsvarer en databaserad. |
La oss se på en tabell som heter TUTOR.
SELECT * FROM TUTOR;
Vi har laget en tabell med SQL-setningen gitt nedenfor:
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
Settte inn verdier til denne tabellen med SQL-setninger gitt nedenfor:
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');
Kodeimplementering med den implisitte 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; /
Resultatet av koden ovenfor skal være:
La oss nå verifisere endringene som gjenspeiles i tabellen TUTOR.
Vi bruker en SQL-setning for å få kolonnene i tabellen:
SELECT * FROM TUTOR;
Dermed ser vi at som pekt av markøren, blir navnet på læreren med kode = 1 oppdatert til Zen.
Eksplisitte markører
Utviklerne kan ha sitt eget brukerdefinerte kontekstområde for å kjøre DML-operasjoner. Dermed kan de utøve mer makt over det. Deklarasjonsdelen av PL / SQL-kodeblokken inneholder eksplisitte markører. Den er vanligvis bygget på SELECT-operasjoner som henter flere rader.
Syntaks for eksplisitt markør:
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
Eksplisitt markør arbeider med prosessene som er oppført nedenfor:
#1) Markørerklæring for initialisering av minne. Her opprettes et navngitt kontekstområde som fungerer som markørnavn.
Syntaks:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#to) Markøråpning for minnetildeling . En markør er nå tilgjengelig for å hente de oppdaterte radene fra databasen.
Syntaks:
OPEN tutorial_s;
# 3) Markøren blir hentet for å få dataene. Etter at SELECT-operasjonen er utført, blir de oppnådde radene satt i det tildelte minnet, og disse blir nå betraktet som aktive sett. Markøren kan få tilgang til en rad om gangen.
Syntaks:
FETCH tutorial_s INTO c_code;
# 4) Markøren er endelig stengt for å frigjøre det tildelte minnet. Ettersom alle postene er oppnådd en etter en, lukkes markøren for å frigjøre kontekstområdet minne.
Syntaks:
CLOSE tutorial_s;
Kodeimplementering med eksplisitt 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; /
Resultatet av koden ovenfor skal være:
Markør for løkke
Mens vi arbeider med eksplisitte markører, kan vi bruke FOR loop i stedet for å bruke utsagn som FETCH, OPEN og CLOSE. Cursor FOR Loop har loopindeksen som en post som peker på raden hentet fra databasen. Neste etter at du har åpnet markøren, henter den flere dataserader gjentatte ganger fra resultatsettet til postfeltene.
Til slutt lukkes markøren etter at alle radene er oppnådd. Vi bruker et punkttegn (.) For å referere til hvert felt i posten. (.) punkttegn brukes faktisk til å velge en komponent.
Syntaksen for 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;
Her erklærer Cursor FOR-løkken ' Tutorial_rec ’ som rekord.
Variabler markør
En markørvariabel brukes til å referere til den nåværende raden i resultatsettet som har mer enn en rad. Den kan brukes til alle typer spørsmål. Det ligner på en variabel av PL / SQL, der vi kan tilordne verdier og kan sendes via et underprogram i databasen. Markørvariabler gir således mye fleksibilitet, og data kan oppnås i en sentralisert prosess.
PL SQL-strenger
Strengene i PL / SQL er en gruppe tegn i en bestemt rekkefølge. Størrelsen på strengen kan være eller ikke være tilgjengelig. Tegnene som kan være en del av en streng kan være et spesialtegn, blanke, tall og alfanumeriske. Dermed er det et sett med valgte symboler fra en gruppe tegn.
Det er tre kategorier strenger i PL / SQL. Disse er listet opp nedenfor:
- Variabel lengde streng: Strengens lengde kan ikke overstige 32 767, og strengen kan ikke polstres.
- Fast lengde streng : Lengden på strengen er nevnt i strengerklæringen. Strengen er polstret med mellomrom for å imøtekomme den angitte lengden på strengen.
- Character Large Objects (CLOB): Dette er en streng med variabel lengde som har en størrelse på opptil 128 TB.
Strengene i PL / SQL kan være enten bokstavelige eller variabler. Tilbudssymboler brukes for bokstaver.
Syntaks:
'This is Software Testing Help'
Vi har også muligheten til å legge til et tilbud i strengen bokstavelig. Dette oppnås ved å beholde to påfølgende enkelt anførselstegn.
Syntaks:
'We can''t go there'
Vi kan beskrive brukerdefinerte avgrensere for streng bokstavelig ved å prefikse den med en 'q' bokstav.
Syntaks:
q'(We can't go there)'
Erklæring om strengvariabler
Det er flere datatyper i PL / SQL som NCHAR, CHAR, VARCHAR, VARCHAR2, CLOB og NCLOB. De nasjonale tegnsettdatatypene er prefikset med N. De brukes til å lagre Unicode-tegn.
I en streng med variabel lengde bør maksimumsgrensen for strenglengden nevnes.
Syntaks:
DECLARE subject varchar(10);
Dette betyr at det variable emnet kan holde på opptil 10 tegn og ikke mer enn det. I tilfelle hvor maksimal lengde er utelatt, kastes kompileringsfeil.
I en streng med fast lengde kan CHAR-datatypen brukes. Det er ikke nødvendig å definere maksimal lengde på en streng med fast lengde. Hvis grensen er utelatt, tar Oracle standardverdien 1.
Syntaks:
DECLARE subject char := 'P';
Hvis du erklærer en CHAR-variabel med lengden over 1, legger Oracle som standard verdien som vi har lagret til den variabelen med mellomrom. Dette gjøres til den angitte maksimale lengden er nådd.
For å lage en erklæring for et stort objekt, brukes CLOB. Maksimal lengde trenger ikke å bli nevnt her, og lengden er angitt av selve Oracle-databasen og er avhengig av størrelsen på databaseblokken.
Syntaks:
DECLARE l CLOB;
Retningslinjer for å velge datatyper i PL / SQL:
- Hvis vi har å gjøre med verdier som alltid har en fast lengde, for eksempel, mobiltelefonnummeret som har konstant lengde og format, bør vi bruke datatypen CHAR eller NCHAR.
- Ellers bør vi bruke VARCHAR2 eller NVARCHAR2 datatype.
- Hvis vi har å gjøre med en streng som har mer enn 32 767 tegn, bør vi bruke CLOB- eller NCLOB-datatypen.
Kodeimplementering med strenger:
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; /
Resultatet av koden ovenfor skal være:
PL / SQL-funksjoner og operatører i streng
Sl nr. | Navn | Formål |
---|---|---|
1 | CONCAT (i, j) | Legger til strengene i og j og returnerer den nye strengen. |
to | ASCII (n) | Returnerer den tilsvarende ASCII-verdien av n. |
3 | CHR (n) | Returnerer tegnet sammen med den tilsvarende ASCII-verdien på n. |
4 | INSTR (i, x, start, n) | Finner substring i i x streng og returnerer deretter forekomsten. Starten refererer til startposisjonen for søking og er en valgfri parameter. N er den nende forekomsten av strengen og er også en valgfri parameter. |
5 | INSTRB (i) | Returnerer posisjonen til en substring i en streng i byte. |
6 | INITCAP (k) | Konverterer det opprinnelige tegnet til enkeltord i streng k til store bokstaver og gir deretter tilbake strengen. |
8 | LENGDE (n) | Returnerer antall tegn i streng m i byte for tegnsett med enkelt byte. |
9 | LTRIM (n, x) | Fjerner x tegn fra venstre for streng n. X er en valgfri parameter hvis den ikke er gitt, fjerner alle ledende mellomrom i strengen n. |
10 | RTRIM (n, x) | Fjerner x tegn fra høyre for streng n. X er en valgfri parameter hvis den ikke er oppgitt, fjerner alle etterfølgende mellomrom i strengen n. |
elleve | TRIM ((trim_char FROM) x); | Fjerner mellomrom eller nevnte tegn fra begynnelsen, slutten eller begge ender av strengen x. |
12 | NEDRE (i) | Konverterer tegnene i streng i til små bokstaver og returnerer deretter strengen. |
1. 3 | ØVRE (i) | Konverterer tegnene til streng i til store bokstaver og returnerer deretter strengen. |
14 | LPAD (i, l, x) | Pads streng x til venstre for å gjøre strengen i lengden til l. Parameteren x er valgfri, hvis utelatte mellomrom er polstret til venstre for streng i. |
femten | RPAD (i, l, x) | Pads streng x til høyre for å gjøre strengen i lengden til l. Parameteren x er valgfri, hvis utelatte mellomrom er polstret til høyre for streng i. |
16 | NANVL (n, val) | Returnerer val hvis n er lik NaN-verdien, ellers returneres n. |
17 | NLSSORT (i) | Endrer sorteringsmetoden for tegn. Det bør nevnes før en hvilken som helst NLS-funksjon, ellers blir standard sortering gjort. |
18 | NLS_INITCAP (i) | Lignende i funksjonalitet som funksjon INITCAP, men det kan ta en annen type teknikk som nevnt i funksjon NLSSORT. |
19 | NLS_LOWER (m) | Tilsvarende i funksjonalitet som funksjon NEDRE, men det kan ta en annen type teknikk som nevnt i funksjon NLSSORT. |
tjue | NLS_UPPER (m) | Lignende i funksjonalitet som funksjon ØVRE, men det kan ta en annen type teknikk som nevnt I funksjon NLSSORT. |
tjueen | NVL (n, val) | Returnerer val hvis x er lik NULL-verdien, ellers returneres n. |
22 | NVL2 (n, val, val2) | Returnerer val hvis x ikke er lik NULL-verdien, ellers hvis x er lik NULL, returneres val2. |
2. 3 | SOUNDEX (i) | Returnerer en streng som har vokalrepresentasjonen av i. |
24 | SUBSTR (n, start, l) | Returnerer en delstreng av streng n som starter fra posisjonen nevnt i start. Parameteren l er valgfri og representerer lengden på underlaget. |
25 | SUBSTRB (n) | Lignende i funksjonalitet som funksjon SUBSTR, men parametrene er i byte og ikke i tegn for et enkelt byte-tegnsystem. |
26 | ERSTATT (n, s, r) | Erstatter forekomsten av s med strengen r med i strengen n. |
Kodeimplementering med noen strengfunksjoner:
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; /
Resultatet av koden ovenfor skal være:
hva er det beste datamaskinoperativsystemet
Forklaring til ovennevnte kode:
- Den første utgangen er PROGRAMVARE TESTHJELP !. Returnerer inngangsstrengen ‘Hjelp til programvaretesting!’ i store bokstaver ved hjelp av OPPER-funksjon.
- Den andre utgangen er programvare testing hjelp !. Returnerer inngangsstrengen PROGRAMVARE TESTHJELP! i små bokstaver ved hjelp av LOWER-funksjonen.
- Den tredje utgangen 2. 3 . Returnerer lengden på inngangsstrengen ved hjelp av LENGDE-funksjon.
- Den fjerde utgangen er Programvare Testing Hjelp !. Returnerer det første tegnet i hvert ord i inngangsstrengen i store bokstaver ved hjelp av INITCAP-funksjon .
- Den femte utgangen er softwar. Returnerer en understreng av inngangsstrengen fra første posisjon til en lengde på 8 inkludert et mellomrom ved hjelp av SUBSTR-funksjon .
- Den sjette utgangen er 6. Returnerer posisjonen til i i inngangsstrengen ved hjelp av INSTR-funksjon .
- Den syvende utgangen er programvaretesteløsning !. Returnerer en ny streng ved å erstatte den hjelp med løsning i inngangsstrengen ved hjelp av ERSTATT funksjon .
- Den åttende utgangen er programvare testing hjelp. Returnerer en ny streng ved å trimme tegnet ! fra høyre for inngangsstrengen ved hjelp av RTRIM-funksjon .
- Den niende utgangen er programvare testing hjelp !. Returnerer en ny streng ved å trimme de ledende og etterfølgende mellomrom fra inngangsstrengen ved hjelp av TRIM-funksjon .
Ofte stilte spørsmål og svar
Q # 1) Hva er markør i PL / SQL?
Svar: Etter at en SQL-setning er utført, bygger Oracle-databasen et minne som kalles kontekstområde. En markør behandler informasjonen fra et utvalgssetning og inneholder radene som er oppdatert av SELECT-operasjonen.
Q # 2) Hva er en markør og type markør?
Svar: Etter at en SQL-setning er utført, bygger Oracle-databasen et minne som kalles kontekstområde som er et midlertidig arbeidsområde. Det er to kategorier markører - Implisitt markør og Eksplisitt markør.
Sp # 3) Hvordan kjører jeg en markør i Oracle?
Svar: For å kjøre en markør i Oracle, er syntaksen: ÅPEN<> . CURSORNAME refererer til navnet på markøren som er tilgjengelig i erklæringsdelen av PL / SQL-kodeblokken.
Sp # 4) Kan vi erklære at markøren begynner?
Svar: Ja, vi kan erklære mer enn en markør i en PL / SQL-kode.
Sp # 5) Hvordan finner du lengden på en streng i PL / SQL?
Svar: Vi kan finne lengden på en streng i PL / SQL ved hjelp av funksjon LENGTH (str). Her er str den strengen vi ønsker å få lengden for. Denne funksjonen returnerer en numerisk verdi.
Sp # 6) Hva er SUBSTR i Oracle?
Svar: SUBSTR-funksjonen gir et bestemt antall tegn fra en bestemt posisjon i en streng. Syntaksen er SUBSTR (n, start, l). Den returnerer en substring fra strengen n som starter fra posisjonen nevnt i start. Parameteren l er valgfri og representerer lengden på underlaget.
Konklusjon
I denne opplæringen har vi diskutert i detalj noen av de grunnleggende konseptene til PL / SQL.
Vi har dekket følgende emner listet opp nedenfor:
- PL SQL markør: Implisitt markør og eksplisitt markør
- PL / SQL-strenger.
- Funksjoner og operatører i streng.
<< PREV Tutorial | NESTE veiledning >>
Anbefalt lesing
- PL SQL Tutorial for nybegynnere med eksempler Hva er PL / SQL
- Java Array Length Tutorial med kodeeksempler
- C # Exception Handling Tutorial med kodeeksempler
- Java 'dette' nøkkelord: Opplæring med kodeeksempler
- Python DateTime Tutorial med eksempler
- Bruk av markør i MongoDB med eksempler
- C # Funksjoner / metoder Opplæring med kodeeksempler
- MySQL Lag visningsveiledning med kodeeksempler