2011-10-05 8 views
5

Desidero trovare un vincolo in Oracle SQL che abbia una determinata condizione di ricerca. Qualcosa di simile:Query Oracle vincolo dopo il valore di search_condition

SELECT constraint_name, constraint_type,search_condition 
FROM USER_CONSTRAINTS 
WHERE table_name ='MYTABLE' AND search_condition = '"myColumn" IS NOT NULL'; 

Problema è ottenere errore "Uso illegale di tipo di dati LUNGO".

Gradirei un'alternativa funzionante. Grazie!

risposta

1

Modificare la seconda metà del tuo clausola WHERE come segue

SUBSTR(search_condition, 1, 21) = 'whatever you're after' 

search_condition è un tipo di dati a lungo e che, piuttosto i limiti che cosa si può fare con esso. l'ultimo parametro del SUBSTR restituisce la lunghezza della stringa restituita, quindi modificala come necessario.

modificato come avevo dimenticato la restrizione clausole WHERE, creano fondamentalmente una funzione PL/SQL per fare quanto sopra e l'uso che nella clausola WHERE,

Per esempio

FUNCTION get_long_16(pFormID NUMBER, pSectionItemID NUMBER, pSequence NUMBER) 
    RETURN VARCHAR2 
    AS 
      l_data LONG; 
    BEGIN 
     SELECT far.text_answer 
     INTO l_data 
     FROM form_answers_repeating far 
     WHERE far.form_id = pFormID 
     AND far.section_item_id = pSectionItemID 
     AND far.sequence = pSequence; 

     RETURN SUBSTR(l_data, 1, 16); 
    END; 

usati qui ....

+0

Ancora non capisco come dovrebbe apparire la mia query. WHERE table_name = 'table' AND get_long_16 (search_condition, 1, 3) = 'aaa'; ?? – Blitzkr1eg

+0

Esattamente, aggiungi la chiamata alla funzione nella tua clausola where :) – OTTA

1

uso

describe USER_CONSTRAINTS ; 

di vedere che search_condition è di digitare LONG.

su Oracle 12: search_condition_vc sarebbe la soluzione.

Problemi correlati