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.