我们原来的服务器上的Oracle是不区分单引号的现在的表结构是:
create table M_PROJECT_WORK
(
  WORK_ID        VARCHAR2(31) not null,
  AUDITTYPE_CODE VARCHAR2(15),
  WORK_URL       VARCHAR2(255),
  WORK_ORDER     INTEGER,
  WORK_IFNEEDS   CHAR(1),
  WORK_ITEM_ID   VARCHAR2(31),
  AUDITTYPE      CHAR(2)
)现在用一下的两条语句查出来的结果都是一样的
select * from M_PROJECT_WORK where work_id='20';
select * from M_PROJECT_WORK where work_id=20;
换了新的服务器之后执行以下的语句直接报:无效的字符select * from M_PROJECT_WORK where work_id=20;
求教

解决方案 »

  1.   

    你这不是区分单引号与不区分的问题,是书写不规范明显 work_id=20 两边类型不一样!!!你这样写要oracle给你进行隐式转换,把整数20转换换字符串
      

  2.   

    --select * from M_PROJECT_WORK where work_id='20';
    ---select * from M_PROJECT_WORK where work_id=20;
    work_id='20'认为字符串类型的与定义的类型相匹配而第二个
    work_id=20 整数型的与实际定义的数据类型是不相匹配的,所以要进行数据类型
    转化为字符串类型要用到to_char()函数了。
      

  3.   

    LZ说一台服务器可以一台不行, 这里的服务器是指DB Server还是AP Server, 如果是AP Server的话就是要看用的是什么provider, 如果是DB Server,可能是数据不同. 不管怎么说这样的情况还是建议改写SQL.
    改成加单引号的SQL: select * from M_PROJECT_WORK where work_id='20'
      

  4.   


    隐式转换不是配置的,oracle本身就有的功能,但是尽量不要用,类型不一致的地方,要用显式转换。select * from M_PROJECT_WORK where work_id=20; 表中定义work_id为varchar2,那你等号右边就得用字符,不能用数字,这是规范。像这样的语句你可以改成:select * from M_PROJECT_WORK where work_id='20' 或 select * from M_PROJECT_WORK where work_id=to_char(20)
      

  5.   

    -- 给个例子给你,你可能就明白啦:scott@TBWORA> create table tb(work_id varchar2(20));表已创建。scott@TBWORA> insert into tb(work_id) values('20');已创建 1 行。scott@TBWORA> insert into tb(work_id) values('30');已创建 1 行。scott@TBWORA> select * from tb where work_id=20;WORK_ID
    ----------------------------------------
    20scott@TBWORA> insert into tb(work_id) values('T40');已创建 1 行。scott@TBWORA> select * from tb where work_id=20;
    ERROR:
    ORA-01722: 无效数字未选定行-- 最后一个查询语句:会先将 work_id 字段隐式转换为 number 类型,
    -- 但是:当 work_id 字段的数据中,
    -- 有不能转换为 number 类型的数据
    -- (某个 work_id 字段的数据中函数字符串,导致隐式转换过程失败)时,查询出错!
    -- 同理:无效字符!
      

  6.   

    -- 最后一个查询语句:会先将 work_id 字段隐式转换为 number 类型,
    -- 但是:当 work_id 字段的数据中,
    -- 有不能转换为 number 类型的数据
    -- (某个 work_id 字段的数据中含有字符串,导致隐式转换过程失败)时,查询出错!
      

  7.   

    两个服务器ORACLE的版本不一致吧?
    高版本的可以支持类型自动转换,低的不行。