3

11g を使用しているため、選択の余地はありません。all_constraints を調べて、次のような search_condition 列を確認しようとしています:

   select * from all_constraints
   where table_name = UPPER('STVTERM') AND 
   constraint_type = 'C' AND 
   CAST(search_condition AS VARCHAR2(100)) NOT LIKE '%IS NOT NULL';

これを、Grails ドメインを吐き出す手っ取り早い汚い proc に入れたいと思っていました。そして、制約は唯一欠けているピースです。私が見逃している場所/ようなもの以外に、単に「nullではない」制約を除外する簡単な方法はありますか? 私は明らかなことを試しました.Oracleはまた、longをvarcharにキャストしてからチェックすることに躊躇しています。この列の他の操作を行う可能性が高いため、厄介な PL-SQL 変換を実行し、それをチェックし、「一致/不一致」の結果を返す関数を作成するソリューションの一部はそうではありません。大いに役立ちます。

誰にもアイデアはありますか?

4

2 に答える 2

2

これは、後世のために、同じ問題を解決しようとしたときに使用したものです。

-- Create the decoder function

create function funk_decode( p_cons_name in varchar2 ) return varchar2
    authid current_user
    is
        l_search_condition user_constraints.search_condition%type;
    begin
        select search_condition into l_search_condition
          from user_constraints
         where constraint_name = p_cons_name;

       return l_search_condition;
   end;
   /

-- Then use it in your select

SELECT constraint_name, constraint_type, status, search_condition FROM USER_CONSTRAINTS where funk_decode(constraint_name) like '%SEARCH_TERM%';

--- Then clean up
drop function funk_decode;

もちろん、SEARCH_TERM探しているものに置き換えてください。ここで見つけたいくつかのコードに基づいています: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:839298816582

于 2013-01-23T01:27:38.727 に答える
1

LONG を varchar2 に変換する関数があります。

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sql.htm#i1025399

于 2012-06-29T06:05:13.867 に答える