2009-10-15 14 views
7

Ho recentemente iniziato una nuova posizione come sviluppatore e sto avendo un po 'di problemi con PL/SQL. Ho usato MS SQL per un certo numero di anni, ma sto trovando PL/SQL un po 'più complicato.Variabili di tabella in Oracle PL/SQL?

Una delle cose che ero solito fare quando scrivevo le funzioni e le stored procedure in MS SQL era di mettere i set di risultati ricorrenti in una variabile di tabella in modo da non doverli ripeterli durante la mia procedura.

Qualcosa di simile a questo:

declare @badPeople table(recordPointer int) 
insert into @badPeople 
select BP_Record_Pointer 
from People 
where BP_Bad = 1 

sto cercando di fare qualcosa di simile in PL/SQL, ma io non sono molto sicuro come iniziare. Qualche idea se questo è anche possibile?

+0

Ecco una domanda simile che potrebbe aiutare forse un dupe [http://stackoverflow.com/questions/670461/does-oracle-have-an-equivalent-of-mssqls-table-variables](http:// stackoverflow.com/questions/670461/does-oracle-have-an-equivalent-of-mssqls-table-variables) – Gratzy

risposta

5

In Oracle a differenza dei cursori MS SQL non sono considerati il ​​diavolo e qualcosa da evitare. In genere, in Oracle, utilizzerai i cursori molto più spesso di quanto faresti in MS SQL. Ovviamente se lo si può fare con solo SQL e nessun cursore è il migliore, ma non abbiate paura di testare e utilizzare i cursori in Oracle. Ottieni un buon libro su PL/SQL, questo è un buon http://www.amazon.com/Oracle-PL-SQL-Programming-4th/dp/0596009771. Il post di Gratzy è un'altra opzione che puoi usare. Quindi prendi un buon libro che puoi usare per capire quando usare cosa. PL/SQL è un ambiente molto ricco rispetto a T-SQL. Mentre ha più di una curva di apprendimento una volta superata la curva iniziale, è un linguaggio molto semplice e pieno di energia. E per di più è molto divertente.

10
declare 
    type t_number is table of number; 
    v_numbers t_number; 
begin 
    select BP_Record_Pointer 
    bulk collect into v_numbers 
    from People 
    where BP_Bad = 1; 
end; 

Ciò creerà una tabella nidificata contenente i valori dalla tabella. È importante notare che la tabella andrà fuori campo alla fine del blocco anonimo, quindi tutto ciò che si vuole fare con esso deve essere fatto all'interno di quel blocco.

+1

+1 per l'esempio sql –

Problemi correlati