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 域。约束是唯一缺​​失的部分。有没有一种简单的方法可以排除那些“不为空”的约束,而不是我缺少的地方/类似的地方?我已经尝试了明显的,Oracle 也不愿将 long 转换为 varchar 然后检查。由于我可能想要对此列进行其他操作,因此我创建了一个执行 kludgy 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 回答