Query to find Constraint by SEARCH_CONDITION

隐身守侯 提交于 2019-12-12 04:55:15

问题


I want to find a CONSTRAINT_NAME in Oracle by SEARCH_CONDITION.

SELECT * FROM ALL_CONSTRAINTS
WHERE TABLE_NAME = 'myTableName';
AND SEARCH_CONDITION = '"myColumn" IS NOT NULL';

ORA-00997: illegal use of LONG datatype.

How to query by SEARCH_CONDITION?


回答1:


SEARCH_CONDITION is LONG so you can't use it for .... very much useful.

For this particular use, I suggest PLSQL routine to write the LONG col into a VARCHAR2(32767) and then apply the check on teh VARCHAR2 variable.

LONGs are an absolute pain.

Also, in your case you can restrict the dataset further by querying ALL_CONS_COLUMNS WHERE column_name = 'colname' and joining the ALL_CONSTRAINTS to get the SERACH_CONDITION.




回答2:


You can write a simple stored procedure:

CREATE OR REPLACE FUNCTION get_search_condition(
  p_owner           ALL_CONSTRAINTS.OWNER%TYPE,
  p_constraint_name ALL_CONSTRAINTS.CONSTRAINT_NAME%TYPE
) RETURN VARCHAR2
IS
  v_long LONG;
BEGIN
  SELECT SEARCH_CONDITION
  INTO   v_long
  FROM   ALL_CONSTRAINTS
  WHERE  CONSTRAINT_NAME = p_constraint_name
  AND    OWNER           = p_owner
  AND    CONSTRAINT_TYPE = 'C';

  RETURN SUBSTR( v_long, 1, 32760 );
END;
/

Then you can use it in the query:

SELECT CONSTRAINT_NAME,
       get_search_condition( OWNER, CONSTRAINT_NAME ) AS SEARCH_CONDITION
FROM   ALL_CONSTRAINTS
WHERE  OWNER           = 'MYSCHEMA'
AND    TABLE_NAME      = 'MYTABLENAME'
AND    CONSTRAINT_TYPE = 'C'
AND    get_search_condition( OWNER, CONSTRAINT_NAME ) = '"MYCOLUMN" IS NOT NULL';


来源:https://stackoverflow.com/questions/24865539/query-to-find-constraint-by-search-condition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!