2011-10-05 12 views
5

Quiero encontrar una restricción en Oracle SQL que tenga una cierta condición de búsqueda. Algo como esto:Consulta Oracle constrain after search_condition's value

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

Problema es que me sale el error "Uso ilegal del tipo de datos LONG".

Agradecería una alternativa de trabajo. ¡Gracias!

Respuesta

1

Modificar la segunda mitad de su cláusula WHERE de la siguiente manera

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

criterio_búsqueda es un tipo de datos LONG y que más bien los límites de lo que puede hacer con él. el último parámetro del SUBSTR da la longitud de la cadena devuelta, así que enmiéndelo según sea necesario.

modificado como me había olvidado la restricción de las cláusulas WHERE, básicamente, crear una función PL/SQL para hacer lo anterior y el uso que en su cláusula WHERE,

Por ejemplo

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; 

Como se usa aquí ....

+0

Todavía no entiendo cómo debería ser mi consulta. WHERE table_name = 'table' Y get_long_16 (search_condition, 1, 3) = 'aaa'; ?? – Blitzkr1eg

+0

Eso es todo, agrega la llamada a la función a tu cláusula where :) – OTTA

1

uso

describe USER_CONSTRAINTS ; 

ver que es de criterio_búsqueda tipo LARGO.

En Oracle 12: search_condition_vc sería la solución.

Cuestiones relacionadas