PL / SQL - Stringhe
La stringa in PL / SQL è in realtà una sequenza di caratteri con una specifica di dimensione opzionale. I caratteri possono essere numerici, lettere, spazi vuoti, caratteri speciali o una combinazione di tutti. PL / SQL offre tre tipi di stringhe:
Fixed-length strings- In tali stringhe, i programmatori specificano la lunghezza mentre dichiarano la stringa. La stringa viene riempita a destra con spazi della lunghezza specificata.
Variable-length strings - In tali stringhe, viene specificata una lunghezza massima fino a 32.767, per la stringa e non viene eseguito alcun riempimento.
Character large objects (CLOBs) - Si tratta di stringhe di lunghezza variabile che possono essere fino a 128 terabyte.
Le stringhe PL / SQL possono essere variabili o letterali. Un valore letterale stringa è racchiuso tra virgolette. Per esempio,
'This is a string literal.' Or 'hello world'
Per includere una virgoletta singola all'interno di una stringa letterale, è necessario digitare due virgolette singole una accanto all'altra. Per esempio,
'this isn''t what it looks like'
Dichiarazione di variabili stringa
Il database Oracle fornisce numerosi tipi di dati stringa, come CHAR, NCHAR, VARCHAR2, NVARCHAR2, CLOB e NCLOB. I tipi di dati preceduti da un'N' siamo 'national character set' datatypes, che memorizzano i dati dei caratteri Unicode.
Se è necessario dichiarare una stringa di lunghezza variabile, è necessario fornire la lunghezza massima di quella stringa. Ad esempio, il tipo di dati VARCHAR2. L'esempio seguente illustra la dichiarazione e l'utilizzo di alcune variabili stringa:
DECLARE
name varchar2(20);
company varchar2(30);
introduction clob;
choice char(1);
BEGIN
name := 'John Smith';
company := 'Infotech';
introduction := ' Hello! I''m John Smith from Infotech.';
choice := 'y';
IF choice = 'y' THEN
dbms_output.put_line(name);
dbms_output.put_line(company);
dbms_output.put_line(introduction);
END IF;
END;
/
Quando il codice precedente viene eseguito al prompt SQL, produce il seguente risultato:
John Smith
Infotech
Hello! I'm John Smith from Infotech.
PL/SQL procedure successfully completed
Per dichiarare una stringa di lunghezza fissa, utilizzare il tipo di dati CHAR. Qui non è necessario specificare una lunghezza massima per una variabile di lunghezza fissa. Se si tralascia il vincolo di lunghezza, Oracle Database utilizza automaticamente una lunghezza massima richiesta. Le due dichiarazioni seguenti sono identiche:
red_flag CHAR(1) := 'Y';
red_flag CHAR := 'Y';
Funzioni e operatori di stringa PL / SQL
PL / SQL offre l'operatore di concatenazione (||)per unire due stringhe. La tabella seguente fornisce le funzioni di stringa fornite da PL / SQL:
S.No | Funzione e scopo |
---|---|
1 | ASCII(x); Restituisce il valore ASCII del carattere x. |
2 | CHR(x); Restituisce il carattere con il valore ASCII di x. |
3 | CONCAT(x, y); Concatena le stringhe x e y e restituisce la stringa aggiunta. |
4 | INITCAP(x); Converte la lettera iniziale di ogni parola in x in maiuscolo e restituisce quella stringa. |
5 | INSTR(x, find_string [, start] [, occurrence]); Cerca find_string in x e restituisce la posizione in cui si verifica. |
6 | INSTRB(x); Restituisce la posizione di una stringa all'interno di un'altra stringa, ma restituisce il valore in byte. |
7 | LENGTH(x); Restituisce il numero di caratteri in x. |
8 | LENGTHB(x); Restituisce la lunghezza di una stringa di caratteri in byte per un set di caratteri a byte singolo. |
9 | LOWER(x); Converte le lettere in x in minuscolo e restituisce quella stringa. |
10 | LPAD(x, width [, pad_string]) ; Pastiglie x con spazi a sinistra, per portare la lunghezza totale della stringa fino a caratteri di larghezza. |
11 | LTRIM(x [, trim_string]); Taglia i caratteri da sinistra di x. |
12 | NANVL(x, value); Restituisce valore se x corrisponde al valore speciale NaN (non un numero), altrimenti x viene restituito. |
13 | NLS_INITCAP(x); Uguale alla funzione INITCAP tranne per il fatto che può utilizzare un metodo di ordinamento diverso come specificato da NLSSORT. |
14 | NLS_LOWER(x) ; Uguale alla funzione LOWER tranne per il fatto che può utilizzare un metodo di ordinamento diverso come specificato da NLSSORT. |
15 | NLS_UPPER(x); Uguale alla funzione UPPER tranne per il fatto che può utilizzare un metodo di ordinamento diverso come specificato da NLSSORT. |
16 | NLSSORT(x); Cambia il metodo di ordinamento dei caratteri. Deve essere specificato prima di qualsiasi funzione NLS; in caso contrario, verrà utilizzato l'ordinamento predefinito. |
17 | NVL(x, value); Restituisce il valore se xè zero; in caso contrario, viene restituito x. |
18 | NVL2(x, value1, value2); Restituisce valore1 se x non è nullo; se x è nullo, viene restituito valore2. |
19 | REPLACE(x, search_string, replace_string); Ricerche x for search_string e lo sostituisce con replace_string. |
20 | RPAD(x, width [, pad_string]); Pastiglie x a destra. |
21 | RTRIM(x [, trim_string]); Trim x da destra. |
22 | SOUNDEX(x) ; Restituisce una stringa contenente la rappresentazione fonetica di x. |
23 | SUBSTR(x, start [, length]); Restituisce una sottostringa di xche inizia nella posizione specificata da start. Può essere fornita una lunghezza opzionale per la sottostringa. |
24 | SUBSTRB(x); Come SUBSTR tranne per il fatto che i parametri sono espressi in byte invece che in caratteri per i sistemi di caratteri a byte singolo. |
25 | TRIM([trim_char FROM) x); Taglia i caratteri da sinistra e destra di x. |
26 | UPPER(x); Converte le lettere in x in maiuscolo e restituisce quella stringa. |
Cerchiamo ora di elaborare alcuni esempi per comprendere il concetto:
Esempio 1
DECLARE
greetings varchar2(11) := 'hello world';
BEGIN
dbms_output.put_line(UPPER(greetings));
dbms_output.put_line(LOWER(greetings));
dbms_output.put_line(INITCAP(greetings));
/* retrieve the first character in the string */
dbms_output.put_line ( SUBSTR (greetings, 1, 1));
/* retrieve the last character in the string */
dbms_output.put_line ( SUBSTR (greetings, -1, 1));
/* retrieve five characters,
starting from the seventh position. */
dbms_output.put_line ( SUBSTR (greetings, 7, 5));
/* retrieve the remainder of the string,
starting from the second position. */
dbms_output.put_line ( SUBSTR (greetings, 2));
/* find the location of the first "e" */
dbms_output.put_line ( INSTR (greetings, 'e'));
END;
/
Quando il codice precedente viene eseguito al prompt SQL, produce il seguente risultato:
HELLO WORLD
hello world
Hello World
h
d
World
ello World
2
PL/SQL procedure successfully completed.
Esempio 2
DECLARE
greetings varchar2(30) := '......Hello World.....';
BEGIN
dbms_output.put_line(RTRIM(greetings,'.'));
dbms_output.put_line(LTRIM(greetings, '.'));
dbms_output.put_line(TRIM( '.' from greetings));
END;
/
Quando il codice precedente viene eseguito al prompt SQL, produce il seguente risultato:
......Hello World
Hello World.....
Hello World
PL/SQL procedure successfully completed.