Istruzione INSERT

Utilizzare l'istruzione INSERT per creare record in una tabella di database. È possibile specificare:

  • Una lista di valori da inserire come nuovo record

  • Un'istruzione SELECT che copia i dati di un'altra tabella da inserire come gruppo di nuovi record

Il formato dell'istruzione INSERT è:

Copia
INSERT INTO nome_tabella [(nome_colonna, ..).] VALUES (expr, ..).

nome_colonna è una lista facoltativa di nomi di colonna che specifica il nome e l'ordine delle colonne di cui sono stati specificati i valori nella clausola VALUES. Se si omette nome_colonna, le espressioni di valore (expr) dovranno specificare i valori di tutte le colonne definite nella tabella e dovranno riflettere l'ordine delle colonne definito per la tabella. nome_colonna può anche specificare la ripetizione di un campo, ad esempio lastDates[4].

expr è la lista di espressioni che forniscono i valori delle colonne del nuovo record. In genere, le espressioni sono valori costanti per le colonne (ma possono anche essere una subquery). È necessario racchiudere i valori delle stringhe di caratteri tra coppie di virgolette singole ('). Per includere una virgoletta singola nel valore di una stringa di caratteri racchiusa tra virgolette singole, usare due virgolette singole insieme (ad esempio, 'L''aquilone').

Le subquery devono essere racchiuse tra parentesi.

Esempio

Inserire un elenco di espressioni.

Copia
INSERT INTO dip (cognome, nome, id_dip, stipendio, data_assunzione)
   VALUES ('Rossi', 'Mario', 'E22345', 27500, DATA '2028-06-05')

Ciascuna istruzione INSERT aggiunge un record nella tabella di database. In questo caso è stato aggiunto un record alla tabella di database dei dipendenti dip. I valori sono stati specificati per cinque colonne. Alle restanti colonne della tabella è stato assegnato un valore vuoto, ossia Null.

Importante  

Nei campi Contenitore, è possibile inserire (INSERT) solo testo, a meno che si prepari un'istruzione parametrizzata e si effettui lo streaming dei dati dall'applicazione. Per utilizzare dati binari, è sufficiente assegnare il nome del file racchiudendolo tra virgolette singole o utilizzare la funzione PutAs(). Quando si specifica il nome file, il tipo file viene dedotto dall'estensione del file:

Copia
INSERT INTO nome_tabella (nome_contenitore) VALUES (? AS 'nome file.estensione file')

I tipi di file non supportati sono inseriti come tipo FILE.

Quando si utilizza la funzione PutAs(), specificare il tipo: PutAs(col, 'tipo'), dove il valore del tipo è un tipo file supportato come descritto in Recupero dei contenuti di un campo Contenitore: funzione CAST() e funzione RicavaCome().

L'istruzione SELECT è una query che restituisce valori per ciascun valore nome_colonna specificato nella lista dei nomi di colonna. Se si specifica un'istruzione SELECT anziché una lista di espressioni di valori, sarà possibile selezionare un gruppo di righe da una tabella e inserirlo in un'altra tabella tramite una singola istruzione INSERT.

Esempio

Inserire utilizzando un'istruzione SELECT.

Copia
INSERT INTO dip1 (nome, cognome, id_dip, settore, stipendio)
   SELECT nome, cognome, id_dip, settore, stipendio from dip
   WHERE settore = 'D050'

In questo tipo di istruzione INSERT, il numero di colonne da inserire deve corrispondere al numero di colonne dell'istruzione SELECT. La lista di colonne da inserire deve corrispondere alle colonne nell'istruzione SELECT, analogamente a quanto accade per le espressioni di valore nell'altro tipo di istruzione INSERT. Ad esempio, la prima colonna inserita corrisponde alla prima colonna selezionata; la seconda alla seconda, e così via.

Le dimensioni e il tipo di dati di queste colonne corrispondenti devono essere compatibili. Ciascuna colonna della lista SELECT dovrebbe disporre di un tipo di dati accettato dal driver client ODBC o JDBC per un'istruzione INSERT/UPDATE standard della colonna corrispondente nella lista INSERT. Se la dimensione dei valori nella colonna della lista SELECT supera la dimensione dei valori nella colonna della lista INSERT corrispondente, i valori vengono troncati.

L'istruzione SELECT viene valutata prima dell'inserimento di qualsiasi valore.