pl sql cursor strings
In questo tutorial, impareremo cos'è un cursore PL SQL e concetti correlati come cursori impliciti ed espliciti, cursore per ciclo, ecc. Impareremo anche le funzioni stringa in PL / SQL:
Nel Collezioni PL SQL tutorial di Serie PL / SQL , abbiamo imparato a conoscere i metodi di raccolta, Varray, tabella annidata e array associativo con l'aiuto di esempi di codice.
In questo articolo, esploreremo i vari tipi di cursori di PL / SQL. Vedremo anche l'implementazione di diversi tipi di cursori con esempi di codice.
Inoltre, discuteremo le stringhe e alcune delle funzioni di stringa integrate disponibili in PL / SQL.
come aprire jar con java
Cosa imparerai:
Cursore PL SQL
Oracle dispone di posizioni di memoria dedicate per l'esecuzione di istruzioni SQL e quindi conserva le informazioni elaborate, per esempio , il numero totale di righe aggiornate.
Un cursore in PL / SQL fornisce un nome e funge da puntatore all'area di lavoro chiamata area di contesto e quindi utilizza le sue informazioni. Mantiene il numero di righe elaborate dall'istruzione SQL. Queste righe vengono chiamate come un insieme attivo. La dimensione dell'insieme attivo è uguale al conteggio delle righe che soddisfano la condizione.
Esistono due tipi di cursori elencati di seguito:
- Cursore implicito
- Cursore esplicito
Cursori impliciti
I cursori impliciti vengono allocati da Oracle per impostazione predefinita durante l'esecuzione delle istruzioni SQL. Contiene le righe interessate dalle operazioni DML come UPDATE, DELETE e INSERT. Pertanto, i cursori impliciti vengono utilizzati quando non è presente un cursore esplicito.
Mentre stiamo inserendo una riga, il cursore mantiene quei dati particolari. Allo stesso modo, per le operazioni di cancellazione e aggiornamento, le righe interessate vengono memorizzate dai cursori. Ai cursori impliciti non viene assegnato alcun nome e quindi non possono essere manipolati dagli sviluppatori ei dati in essi contenuti non possono essere utilizzati da nessuna parte.
Gli ultimi cursori aggiornati possono essere utilizzati con l'aiuto degli attributi del cursore. Questi attributi sono le proprietà che aiutano a fare riferimento al tipo di dati e alla struttura degli elementi senza ripetere le loro definizioni. Tutte le colonne e le tabelle in un database hanno un attributo comune (rappresentato dal segno%) e possono essere utilizzate come sql% nome_attributo.
Sl No. | Nome | Finalità |
---|---|---|
7 | LUNGHEZZA (m) | Restituisce il conteggio del numero di caratteri nella stringa m. |
1 | %TROVATO | Fornisce il risultato in booleano. Restituisce vero se le istruzioni DELETE, INSERT, UPDATE o SELECT hanno effetto su una o più righe. Oppure viene restituito false. |
Due | %NON TROVATO | Fornisce il risultato in booleano e ha la funzionalità inversa di% FOUND. Restituisce true se le istruzioni DELETE, INSERT, UPDATE o SELECT non influiscono su nessuna riga. Oppure viene restituito false. |
3 | %È APERTO | Fornisce il risultato in booleano. Restituisce vero se il cursore è attualmente aperto. Oppure viene restituito false. |
4 | % ROWCOUNT | Fornisce il conteggio del numero di righe recuperate dalle istruzioni DELETE, INSERT, UPDATE o SELECT. |
5 | %GENERE | Fornisce il tipo di dati della colonna o della variabile del database. |
6 | % ROWTYPE | Fornisce il tipo di record equivalente a una riga del database. |
Consideriamo una tabella che si chiama TUTOR.
SELECT * FROM TUTOR;
Abbiamo creato una tabella con l'istruzione SQL fornita di seguito:
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
Valori inseriti in questa tabella con le istruzioni SQL fornite di seguito:
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');
Implementazione del codice con il cursore implicito:
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; /
L'output del codice precedente dovrebbe essere:
Verifichiamo ora le modifiche riflesse nella tabella denominata TUTOR.
Stiamo usando un'istruzione SQL per ottenere le colonne della tabella:
SELECT * FROM TUTOR;
Così vediamo che, come indicato dal cursore, il nome dell'insegnante con codice = 1 viene aggiornato allo Zen.
Cursori espliciti
Gli sviluppatori possono avere la propria area di contesto definita dall'utente per eseguire operazioni DML. Così possono esercitare più potere su di esso. La sezione dichiarazione del blocco di codice PL / SQL contiene cursori espliciti. Normalmente è costruito su operazioni SELECT che recuperano più righe.
Sintassi del cursore esplicito:
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
Il cursore esplicito funziona sui processi elencati di seguito:
# 1) Dichiarazione del cursore per l'inizializzazione della memoria. Qui viene creata un'area di contesto con nome che funge da nome del cursore.
Sintassi:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#Due) Apertura del cursore per l'allocazione della memoria . È ora disponibile un cursore per recuperare le righe aggiornate dal database.
Sintassi:
OPEN tutorial_s;
# 3) Il cursore viene recuperato per ottenere i dati. Dopo aver eseguito l'operazione SELECT, le righe ottenute vengono inserite nella memoria allocata e queste vengono ora considerate come set attivi. Il cursore può accedere a una riga alla volta.
Sintassi:
FETCH tutorial_s INTO c_code;
# 4) Il cursore è finalmente chiuso per liberare la memoria allocata. Poiché tutti i record vengono ottenuti uno per uno, il cursore viene chiuso per rilasciare la memoria dell'area di contesto.
Sintassi:
CLOSE tutorial_s;
Implementazione del codice con cursore esplicito:
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; /
L'output del codice precedente dovrebbe essere:
Cursore per ciclo
Mentre lavoriamo con cursori espliciti, possiamo usare il ciclo FOR invece di usare istruzioni come FETCH, OPEN e CLOSE. Cursor FOR Loop ha l'indice del loop come record che punta alla riga ottenuta dal database. Successivamente, dopo aver aperto il cursore, recupera più righe di dati ripetutamente dal set di risultati nei campi del record.
Infine, il cursore viene chiuso dopo che tutte le righe sono state ottenute. Usiamo un punto (.) Per fare riferimento a ogni campo del record. (.) il segno del punto viene effettivamente utilizzato per selezionare un componente.
La sintassi per il ciclo 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;
Qui, il ciclo Cursor FOR dichiara ' Tutorial_rec ' come un record.
Cursore delle variabili
Una variabile cursore viene utilizzata per fare riferimento alla riga presente nel set di risultati che ha più di una riga. Può essere utilizzato per qualsiasi tipo di query. È simile a una variabile di PL / SQL, in cui possiamo assegnare valori e può essere passato tramite un sottoprogramma nel database. Pertanto, le variabili cursore forniscono molta flessibilità e i dati possono essere ottenuti in un processo centralizzato.
Stringhe PL SQL
Le stringhe in PL / SQL sono un gruppo di caratteri in un ordine particolare. La dimensione della stringa può o non può essere disponibile. I caratteri che possono essere parte di una stringa possono essere caratteri speciali, spazi, numeri e caratteri alfanumerici. Quindi è un insieme di simboli scelti da un gruppo di caratteri.
Esistono tre categorie di stringhe in PL / SQL. Questi sono elencati di seguito:
- Stringa di lunghezza variabile: La lunghezza della stringa non può superare 32.767 e non può essere presente alcuna spaziatura interna alla stringa.
- Stringa di lunghezza fissa : La lunghezza della stringa è menzionata nella dichiarazione della stringa. La stringa è riempita a destra di spazi per contenere la lunghezza specificata della stringa.
- Character Large Objects (CLOB): Questa è una stringa di lunghezza variabile con una dimensione fino a 128 TB.
Le stringhe in PL / SQL possono essere letterali o variabili. I simboli di citazione vengono utilizzati per i letterali.
Sintassi:
'This is Software Testing Help'
Inoltre, abbiamo la possibilità di aggiungere una citazione all'interno della nostra stringa letterale. Ciò si ottiene mantenendo due virgolette singole consecutive.
Sintassi:
'We can''t go there'
Possiamo descrivere i delimitatori definiti dall'utente per la stringa letterale anteponendogli una lettera 'q'.
Sintassi:
q'[We can't go there]'
Dichiarazione di variabili stringa
Esistono più tipi di dati in PL / SQL come NCHAR, CHAR, VARCHAR, VARCHAR2, CLOB e NCLOB. I tipi di dati del set di caratteri nazionali hanno il prefisso N. Sono utilizzati per memorizzare i caratteri Unicode.
In una stringa di lunghezza variabile, dovrebbe essere menzionato il limite massimo della lunghezza della stringa.
Sintassi:
DECLARE subject varchar(10);
Ciò significa che il soggetto variabile è in grado di contenere fino a 10 caratteri e non di più. Nel caso in cui viene omessa la lunghezza massima, viene generato un errore di compilazione.
In una stringa di lunghezza fissa, è possibile utilizzare il tipo di dati CHAR. Non è necessario definire la lunghezza massima di una stringa di lunghezza fissa. Se il limite viene omesso, Oracle assume il valore predefinito 1.
Sintassi:
DECLARE subject char := 'P';
Se dichiari una variabile CHAR con la lunghezza superiore a 1, Oracle per impostazione predefinita riempie il valore che abbiamo memorizzato in quella variabile con spazi. Questo viene fatto fino al raggiungimento della lunghezza massima specificata.
Per fare una dichiarazione per un oggetto di grandi dimensioni, viene utilizzato CLOB. La lunghezza massima non deve essere menzionata qui e la lunghezza è impostata dal database Oracle stesso e dipende dalla dimensione del blocco del database.
Sintassi:
DECLARE l CLOB;
Linee guida per scegliere i tipi di dati in PL / SQL:
- Se abbiamo a che fare con valori che hanno sempre una lunghezza fissa, per esempio, il numero di cellulare che ha lunghezza e formato costanti, dovremmo usare il tipo di dati CHAR o NCHAR.
- Altrimenti, dovremmo utilizzare il tipo di dati VARCHAR2 o NVARCHAR2.
- Se abbiamo a che fare con una stringa che ha più di 32.767 caratteri, dovremmo usare il tipo di dati CLOB o NCLOB.
Implementazione del codice con stringhe:
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; /
L'output del codice precedente dovrebbe essere:
Funzioni e operatori PL / SQL in stringa
Sl No. | Nome | Finalità |
---|---|---|
1 | CONCAT (i, j) | Aggiunge le stringhe i e j e restituisce la nuova stringa. |
Due | ASCII (n) | Restituisce il valore ASCII equivalente di n. |
3 | CHR (n) | Restituisce il carattere insieme al valore ASCII equivalente di n. |
4 | INSTR (i, x, inizio, n) | Trova la sottostringa i in x stringa e quindi restituisce la posizione dell'occorrenza. L'inizio si riferisce alla posizione di inizio della ricerca ed è un parametro opzionale. La n è l'ennesima occorrenza della stringa ed è anche un parametro opzionale. |
5 | INSTRB (i) | Restituisce la posizione di una sottostringa in una stringa in byte. |
6 | INITCAP (k) | Converte il carattere iniziale delle singole parole nella stringa k in maiuscolo e quindi restituisce la stringa. |
8 | LUNGHEZZA B (n) | Restituisce il conteggio dei caratteri nella stringa m in byte per un set di caratteri a byte singolo. |
9 | LTRIM (n, x) | Rimuove i caratteri x da sinistra della stringa n. La x è un parametro facoltativo se non fornito, rimuove tutti gli spazi iniziali della stringa n. |
10 | RTRIM (n, x) | Rimuove i caratteri x dalla destra della stringa n. La x è un parametro facoltativo se non fornito, rimuove tutti gli spazi finali della stringa n. |
undici | TRIM ([trim_char FROM) x); | Rimuove spazi o caratteri menzionati dall'inizio, dalla fine o da entrambe le estremità della stringa x. |
12 | INFERIORE (i) | Converte i caratteri della stringa i in minuscolo e quindi restituisce la stringa. |
13 | SUPERIORE (i) | Converte i caratteri della stringa i in lettere maiuscole e quindi restituisce la stringa. |
14 | LPAD (i, l, x) | Inserisce la stringa x a sinistra per rendere la stringa i di lunghezza l. Il parametro x è facoltativo, se gli spazi omessi vengono riempiti a sinistra della stringa i. |
quindici | RPAD (i, l, x) | Inserisce la stringa x a destra per rendere la stringa i di lunghezza l. Il parametro x è facoltativo, se gli spazi omessi vengono riempiti a destra della stringa i. |
16 | NANVL (n, val) | Restituisce val se n è uguale al valore NaN, altrimenti viene restituito n. |
17 | NLSSORT (i) | Modifica il metodo di ordinamento dei caratteri. Dovrebbe essere menzionato prima di qualsiasi funzione NLS, altrimenti verrà eseguito l'ordinamento predefinito. |
18 | NLS_INITCAP (i) | Simile nella funzionalità alla funzione INITCAP ma può richiedere un diverso tipo di tecnica come menzionato nella funzione NLSSORT. |
19 | NLS_LOWER (m) | Simile nella funzionalità alla funzione LOWER ma può richiedere un diverso tipo di tecnica come menzionato nella funzione NLSSORT. |
venti | NLS_UPPER (m) | Simile nella funzionalità alla funzione UPPER ma può richiedere un diverso tipo di tecnica come menzionato nella funzione NLSSORT. |
ventuno | NVL (n, val) | Restituisce val se x è uguale al valore NULL, altrimenti viene restituito n. |
22 | NVL2 (n, val, val2) | Restituisce val se x non è uguale al valore NULL, altrimenti se x è uguale a NULL, viene restituito val2. |
2. 3 | SOUNDEX (i) | Restituisce una stringa con la rappresentazione vocale di i. |
24 | SUBSTR (n, inizio, l) | Restituisce una sottostringa di stringa n che inizia dalla posizione menzionata in start. Il parametro l è facoltativo e rappresenta la lunghezza della sottostringa. |
25 | SUBSTRB (n) | Funzionalità simile alla funzione SUBSTR ma i parametri sono in byte e non in caratteri per un sistema di caratteri a byte singolo. |
26 | SOSTITUISCI (n, s, r) | Sostituisce le occorrenze di s con la stringa r con nella stringa n. |
Implementazione del codice con alcune funzioni di stringa:
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; /
L'output del codice precedente dovrebbe essere:
c ++ numero casuale compreso tra 0 e 100
Spiegazione del codice sopra:
- La prima uscita è AIUTO PER IL TEST DEL SOFTWARE !. Restituisce la stringa di input 'Aiuto per il test del software!' in maiuscolo con l'aiuto di Funzione UPPER.
- La seconda uscita è aiuto per il test del software !. Restituisce la stringa di input AIUTO AI TEST DEL SOFTWARE! in minuscolo con l'aiuto di la funzione INFERIORE.
- La terza uscita 2. 3 . Restituisce la lunghezza della stringa di input con l'aiuto di Funzione LUNGHEZZA.
- La quarta uscita è Aiuto per il test del software !. Restituisce il primo carattere di ogni parola della stringa di input in maiuscolo con l'aiuto di Funzione INITCAP .
- La quinta uscita è softwar. Restituisce una sottostringa della stringa di input dalla prima posizione a una lunghezza di 8 incluso uno spazio con l'aiuto di Funzione SUBSTR .
- La sesta uscita è 6. Restituisce la posizione di nel nella stringa di input con l'aiuto di Funzione INSTR .
- La settima uscita è soluzione di test del software !. Restituisce una nuova stringa sostituendola Aiuto con soluzione nella stringa di input con l'aiuto di REPLACE funzione .
- L'ottava uscita è aiuto per il test del software. Restituisce una nuova stringa tagliando il carattere ! da destra della stringa di input con l'aiuto di Funzione RTRIM .
- La nona uscita è aiuto per il test del software !. Restituisce una nuova stringa tagliando gli spazi iniziali e finali dalla stringa di input con l'aiuto di Funzione TRIM .
Domande e risposte frequenti
D # 1) Cos'è il cursore in PL / SQL?
Risposta: Dopo l'esecuzione di un'istruzione SQL, il database Oracle crea una memoria denominata area di contesto. Un cursore contiene le informazioni elaborate da un'istruzione select e contiene le righe aggiornate da tale operazione SELECT.
D # 2) Cos'è un cursore e il tipo di cursore?
Risposta: Dopo che un'istruzione SQL è stata eseguita, il database Oracle crea una memoria chiamata area di contesto che è un'area di lavoro temporanea. Esistono due categorie di cursori: cursore implicito e cursore esplicito.
D # 3) Come si esegue un cursore in Oracle?
Risposta: Per eseguire un cursore in Oracle, la sintassi è: APERTO<> . Il CURSORNAME si riferisce al nome del cursore disponibile nella sezione dichiarazione del blocco di codice PL / SQL.
Q # 4) Possiamo dichiarare l'inizio del cursore dentro?
Risposta: Sì, possiamo dichiarare più di un cursore all'interno di un blocco di codice PL / SQL.
Q # 5) Come trovi la lunghezza di una stringa in PL / SQL?
Risposta: Possiamo trovare la lunghezza di una stringa in PL / SQL con l'aiuto della funzione LENGTH (str). Qui str è la stringa per la quale vogliamo ottenere la lunghezza. Questa funzione restituisce un valore numerico.
Q # 6) Cos'è SUBSTR in Oracle?
Risposta: La funzione SUBSTR fornisce un numero particolare di caratteri da una posizione specifica di una stringa. La sintassi è SUBSTR (n, start, l). Restituisce una sottostringa dalla stringa n che inizia dalla posizione menzionata in start. Il parametro l è facoltativo e rappresenta la lunghezza della sottostringa.
Conclusione
In questo tutorial, abbiamo discusso in dettaglio alcuni dei concetti di base di PL / SQL.
Abbiamo trattato i seguenti argomenti elencati di seguito:
- Cursore PL SQL: cursore implicito e cursore esplicito
- Stringhe PL / SQL.
- Funzioni e operatori in String.
<< PREV Tutorial | PROSSIMO Tutorial >>
Lettura consigliata
- Tutorial PL SQL per principianti con esempi | Cos'è PL / SQL
- Tutorial sulla lunghezza di array Java con esempi di codice
- Esercitazione sulla gestione delle eccezioni C # con esempi di codice
- Parola chiave Java 'questo': tutorial con esempi di codice
- Tutorial Python DateTime con esempi
- Utilizzo del cursore in MongoDB con esempi
- Esercitazione su funzioni / metodi C # con esempi di codice
- Tutorial MySQL Create View con esempi di codice