In SQL Server, è ansible dichiarare una variabile di tabella ( DECLARE @table TABLE
), che viene prodotta mentre lo script viene eseguito e quindi rimosso dalla memoria.
Oracle ha una funzione simile? O sono bloccato con le DROP
CREATE
/ DROP
che segmentano il mio disco rigido?
Sì.
Dichiarare le variabili TABLE TYPE in un blocco dichiarativo PL / SQL. Le variabili di tabella sono anche conosciute come tabella index-by o array. La variabile table contiene una colonna che deve essere un tipo di dati scalare o record più una chiave primaria di tipo BINARY_INTEGER. Sintassi:
TIPO DECLARE type_name TABLE OF (tipo_colonna | variabile% TYPE | table.column% TYPE [NOT NULL] INDICE DA BINARY INTEGER;
– Quindi per dichiarare una variabile TABLE di questo tipo: nome_tabella nome_tipo;
– Assegnazione di valori a una variabile TABLE: nome_variabile (n) .field_name: = ‘some text’; – Dove ‘n’ è il valore dell’indice
Rif: http://www.iselfschooling.com/syntax/OraclePLSQLSyntax.htm
Potresti anche dare un’occhiata a Tabelle temporanee globali
Sì, ha un tipo che può contenere il set di risultati di una query (se posso indovinare cosa fa TABLE). Da chiedere a Tom : la tua procedura potrebbe essere simile a questa:
procedure p( p_state in varchar2, p_cursor in out ref_cursor_type ) is begin open p_cursor for select * from table where state = P_STATE; end;
dove p_cursor è come un tipo di tabella. Come è già stato risposto ci sono molte opzioni per la memorizzazione dei set di risultati in Oracle. Generalmente Oracle PL / SQL è molto più potente degli script sqlserver.
la tabella in variabile in oracle non è uguale alle variabili di tabella in MS SQLServer. in oracle è come un normale array in java o c #. ma in MS SQLserver è uguale a qualsiasi tabella, è ansible chiamarla tabella logica. ma se vuoi qualcosa in oracle che fa esattamente la stessa cosa della variabile di tabella di SQLserver puoi usare il cursore.
Saluti
La soluzione seguente è la più vicina a SQL Server che posso fare oggi.
Oggetti:
CREA O SOSTITUISCA IL TIPO T_NUMBERS È TABELLA DEL NUMERO; CREARE O SOSTITUIRE L'ACCUMULO DI FUNZIONI (vNumbers T_NUMBERS) INVIO T_NUMBERS COME vRet T_NUMBERS; INIZIO SELEZIONA SUM (COLUMN_VALUE) BULK COLLECT INTO vRet FROM TABLE (CAST (vNumbers AS T_NUMBERS)); RETURN vRet; FINE;
Interrogazioni:
--Query 1: Elenco numeri fisso. SELEZIONA FROM TABLE (ACCUMULO (T_NUMBERS (1, 2, 3, 4, 5))); --Query 2: Elenco numeri da query. CON NOME AS ( SELEZIONA 1 COME COLUMN_VALUE FROM DUAL UNION SELEZIONA 2 COME COLUMN_VALUE DALL'UNIONE DOPPIA SELEZIONA 3 COME COLUMN_VALUE DALL'UNIONE DOPPIA SELEZIONA 4 COME COLUMN_VALUE FROM DUAL UNION SELEZIONA 5 COME COLUMN_VALUE DA DUAL ) SELEZIONA DALLA TABELLA ( ACCUMULARE( (SELEZIONA CAST (COLLECT (COLUMN_VALUE) COME T_NUMBERS) Da cteNumbers) ) );