2012-07-30 7 views
18

Quando sto provando ad eseguire INSERT dichiarazione in Oracle, ho ottenuto SQL Error: ORA-00917: missing comma errore perché non è un valore come Alex's Tea Factory nel mio INSERT dichiarazione.Oracle PL-SQL carattere di escape (per un " ' ")

Come posso evitare '?

risposta

31

di sfuggire, doppie le virgolette:

INSERT INTO TABLE_A VALUES ('Alex''s Tea Factory'); 
6

In SQL, si sfuggire una citazione di un'altra citazione:

SELECT 'Alex''s Tea Factory' FROM DUAL 
5

è possibile utilizzare ESCAPE come dato esempio di seguito

Il Il carattere jolly '_' viene utilizzato per abbinare esattamente un carattere, mentre '%' è usato per abbinare zero o più occorrenze di qualsiasi carattere. Questi caratteri possono essere sfuggiti in SQL.

SELECT name FROM emp WHERE id LIKE '%/_%' ESCAPE '/'; 

Le stesse opere all'interno di PL/SQL:

if(id like '%/_%' ESCAPE '/') 

questo vale solo per come modelli, per esempio in un inserto non c'è bisogno di sfuggire _ o%, sono utilizzati come caratteri normali comunque. Nelle stringhe arbitrarie, solo 'deve essere evaso da' '.

+0

Puoi mostrare come utilizzare questo nel caso di una dichiarazione INSERT? –

1

La tua domanda implica che stai costruendo l'istruzione INSERT rialzando concatenando le stringhe. Suggerisco che questa è una scelta sbagliata in quanto lascia aperta agli attacchi di SQL injection se le stringhe derivano dall'input dell'utente. Una scelta migliore consiste nell'utilizzare i marcatori di parametro e legare i valori ai marcatori. Se cerchi Oracle parameter markers probabilmente troverai alcune informazioni per la tua specifica tecnologia di implementazione (ad esempio C# e ADO, Java e JDBC, Ruby e RubyDBI, ecc.).

Condividi e divertiti.

0
SELECT q'[Alex's Tea Factory]' FROM DUAL 
+2

[modifica] la risposta e aggiungi una spiegazione. – Tushar