2015-06-13 16 views
7

ho creato una tabella molto semplice:Oracle Query - Missing Definisce

CREATE TABLE TMP ("ID" VARCHAR2(20 BYTE)); 

poi ha cercato di fare questo:

DECLARE 
    whatever varchar2(20) := :bananas; 
BEGIN 
    MERGE INTO tmp t USING 
    (SELECT whatever AS this_id FROM DUAL) d 
    ON (t.id = d.this_id) 
    WHEN NOT MATCHED THEN 
     INSERT (id) VALUES (d.this_id); 
END; 

E poi inserire lega

enter image description here

E ottenere questo errore:

Error starting at line : 1 in command - 
DECLARE 
    whatever varchar2(20) := :bananas; 
BEGIN 
    MERGE INTO tmp2 t USING 
    (SELECT whatever AS this_id FROM DUAL) d 
    ON (t.id = d.this_id) 
    WHEN NOT MATCHED THEN 
     INSERT (id) VALUES (d.this_id); 
END; 
Error report - 
Missing defines 

Non ho avuto fortuna a capire cosa vuole. Se sostituisco ': bananas' con un valore come 'a' funziona, ma non quando uso una variabile e lego il valore. Qualcuno sa cosa c'è di sbagliato nella mia domanda? Grazie.

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
PL/SQL Release 11.2.0.4.0 - Production 
"CORE 11.2.0.4.0 Production" 
TNS for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production 
NLSRTL Version 11.2.0.4.0 - Production 

modificare: Ho appena notato che l'errore non impedisce i dati vengano fuse in modo corretto ... L'errore è ancora preoccupante se

+1

Cosa significa ': banane'? Questo codice è in una stored procedure? Il parametro deve essere definito. –

+0

Stavo solo usando un nome per una variabile. Voglio eseguire questo come una query con clobs, ma stavo avendo questo problema con "Missing definisce" che appare sempre e stava cercando di rimuovere un sacco di codice fino a quando non potrei restringere il problema. –

+0

Rileggi il tuo commento, è definito nella schermata utilizzando la finestra "Inserisci binding" su Oracle SQL Developer –

risposta

1

Prova ad aggiungere uno slash dopo la dichiarazione sul una linea a parte. Quindi evidenzia l'intero blocco e premi F5.

1

Probabilmente salterò la sezione DECLARE tutti insieme e userei ovunque: banane invece di qualsiasi cosa. Dopo aver messo BEGIN: banane: =: banane; e non avrai nessun errore Buona fortuna.

0

Ho avuto lo stesso messaggio di errore. La mia colonna DB era di 32 caratteri (VARCHAR2(32 CHAR)) e la variabile dichiarata per il filtro era 64 caratteri (szId varchar2(32) := :Id;). Ho copiato e incollato qualche valore come variabile di input. Per qualche motivo ho avuto spazio bianco alla fine. Quindi ho ottenuto 33 caratteri e ho accennato all'errore. Ho fatto la mia dichiarazione di 32 caratteri e ho iniziato a ottenere un errore più significativo.

Nel tuo caso la colonna DB è VARCHAR2(20 BYTE) e la dichiarazione è whatever varchar2(20) := :bananas;. Potrei sembrare che byte non sia char in dimensioni totali.