Errore SQL: ORA-00933: comando SQL non terminato correttamente

Sto cercando di aggiornare un record nello sviluppatore Oracle Oracle utilizzando Joins. Di seguito è la mia query-

UPDATE system_info set field_value = 'NewValue' FROM system_users users JOIN system_info info ON users.role_type = info.field_desc where users.user_name = 'uname' 

Tuttavia, quando ho provato ad eseguirlo, ho ricevuto il seguente errore:

 Error report: SQL Error: ORA-00933: SQL command not properly ended 00933. 00000 - "SQL command not properly ended" 

Ho provato a rimuovere JOINS

 UPDATE system_info info SET info.field_value = 'NewValue' FROM system_users users where users.user_name = 'uname' AND users.role_type = info.field_desc 

ma avendo ancora lo stesso errore qualcuno può dirmi il motivo dell’errore e la soluzione

Oracle non consente l’unione di tabelle in un’istruzione UPDATE. Devi riscrivere la tua affermazione con una sottocartella correlata

Qualcosa come questo:

 UPDATE system_info SET field_value = 'NewValue' WHERE field_desc IN (SELECT role_type FROM system_users WHERE user_name = 'uname') 

Per una descrizione completa sulla syntax (valida) dell’istruzione UPDATE, leggere il manuale:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10008.htm#i2067715

Punto ; virgola ; alla fine del comando avevo causato lo stesso errore su di me.

 cmd.CommandText = "INSERT INTO U_USERS_TABLE (USERNAME, PASSWORD, FIRSTNAME, LASTNAME) VALUES (" + "'" + txtUsername.Text + "'," + "'" + txtPassword.Text + "'," + "'" + txtFirstname.Text + "'," + "'" + txtLastname.Text + "');"; <== Semicolon in "" is the cause. Removing it will be fine. 

Spero che sia d'aiuto.

Non esattamente il caso del contesto attuale di questa domanda, ma questa eccezione può essere riprodotta dalla domanda successiva:

 update users set dismissal_reason='he can't and don't want' where userid=123 

Le virgolette singole in parole can't e don't rompere la corda. Nel caso in cui la stringa abbia solo una virgola interna, ad es. “Non vuole”, oracle genera un errore quotato più rilevante non corretto , ma in caso di due comandi SQL non correttamente terminati viene lanciato.

Riepilogo: controlla la tua query per le doppie virgolette singole.

La tua query dovrebbe essere simile

 UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value 

Puoi consultare la seguente domanda per aiuto

  • Query di aggiornamento SQL usando i join ?

è molto vero su oracle e sql è “utenti” è una parola riservata basta cambiarlo, ti servirà il meglio se ti piace cambiarlo in questo

 UPDATE system_info set field_value = 'NewValue' 

FROM system_users users JOIN system_info info ON users.role_type = info.field_desc where users.user_name = 'uname'