请考虑以下情况:
CREATE TABLE test
(
name VARCHAR2(50),
type LONG,
CONSTRAINT c_type CHECK (type IN ('a', 'b', 'c', 'd', 'e', 'f'))
);
我想alter constraint
c_type并在检查约束中添加一个新类型,例如'g'。
现在要改变一个约束,我们需要删除它并重新创建它,但是我想删除约束,只要它不包含类型'g'的检查。
我查看了表格user_constraints
,它包含列search_condition但问题是“type”列的数据类型是long
,我无法与varchar
进行比较。
如何比较Long
数据类型?
答案 0 :(得分:3)
我认为您的问题不在于TYPE
列是长的,而SEARCH_CONDITION
的{{1}}是长的。
所以你可以做一些类似this post中答案的事情,在你的情况下,它可以是这样的:
user_constraints
答案 1 :(得分:3)
作为另一种方法,您可以使用游标 - PL / SQL在从游标获取时将LONG
数据类型的值转换为VARCHAR2
数据类型:
set serveroutput on;
declare
cursor c_cursor is
select search_condition as sc
from user_constraints
where constraint_name = 'C_TYPE';
l_list varchar2(4000);
begin
/*
As long as you are querying user_constraints data dictionary view,
specifying constraint name
you guarantee that the only one row will be returned.
*/
for i in c_cursor
loop
l_list := i.sc;
end loop;
dbms_output.put_line(l_list);
end;
结果:
anonymous block completed
col in ('a', 'b','c','d','e','f')