2011-10-05 7 views
5

特定のsearch_conditionを持つOracle SQLの制約を検索したいとします。このようなもの:search_conditionの値の後にOracleに制約を問い合わせます。

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

問題「ILEgal use of LONG」というエラーが表示されます。

私は代わりに働くことに感謝します。ありがとう!

答えて

1

はあなたのWHERE句の後半を修正し、次のように

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

search_conditionには、LONGデータ型であり、それはむしろ、あなたがそれで何ができるかが制限されます。 SUBSTRの最後のパラメータは返される文字列の長さを返し、必要に応じて修正します。私が使用したとしてWHERE句、基本的には上記の操作を行うと、あなたのWHERE句であることを使用するPL/SQL関数を作成し、

例えば

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; 

上の制限を忘れていて改正

SEARCH_CONDITIONがであることを見るにはここをクリックしてください....

+0

私はまだ私のクエリがどのように見えるかを知りません。 WHERE table_name = 'table' AND get_long_16(search_condition、1,3)= 'aaa'; ?? – Blitzkr1eg

+0

それは正確には、あなたのwhere節に関数呼び出しを追加することです:) – OTTA

1

使用

describe USER_CONSTRAINTS ; 

LONGと入力します。

オンOracle 12:search_condition_vcが解決策になります。

関連する問題