【问题标题】:Comparing long data type with varchar data in oracleoracle中长数据类型与varchar数据的比较
【发布时间】:2013-10-06 08:57:06
【问题描述】:

考虑以下场景:

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,但这里的问题是列“类型”的数据类型是 long,我无法与 varchar 进行比较。

如何比较Long的数据类型?

【问题讨论】:

  • 也许这篇文章能给你一些想法stackoverflow.com/questions/15918240/…
  • 您是要定期扩展或缩小元素列表还是一次性任务?
  • @NicholasKrasnov 它现在是一次性任务,但添加类型的块将定期执行,因此我想避免执行该块。

标签: oracle constraints type-conversion check-constraints


【解决方案1】:

我认为您的问题不在于 TYPE 列是 LONG,而是 user_constraintsSEARCH_CONDITION 是 LONG。

因此,您可以执行类似于this post 中的答案的操作,在您的情况下,它可能如下所示:

select count(*)
from 
(SELECT XMLTYPE(
DBMS_XMLGEN.GETXML('select SEARCH_CONDITION from user_constraints ')
).extract('//SEARCH_CONDITION/text()').getstringval() srch_cond
from dual)
where srch_cond like '%'g'%'

Here is a sqlfiddle Demo

【讨论】:

  • '%&'g&'%' 我不知道如何输入搜索条件,请您解释一下吗?
  • 因为我使用 DBMS_XMLGEN.GETXML 将 long 转换为 varchar2,所以它被“xml 转义”,所以每个 ' 都变成了 '。您只能运行内部查询并查看结果
  • 我在 sqldeveloper 上执行相同的操作,但它要求输入 APOS 的替换值,然后它给出 ORA-31011: XML parsing failed 错误。
  • 您也可以随时使用 plsql 将 long 值与 varchar2 进行比较,因为 plsql 可以隐式转换两者之间的位
【解决方案2】:

作为另一种方法,您可以使用游标 - 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2015-04-03
    相关资源
    最近更新 更多