我试了,没有问题的,除非你的语句不能select到记录
或者,你把语句重写一遍,或许有什么特殊的空白符在里面

解决方案 »

  1.   

    to ATGC:
    不能select到记录不是这样的错误提示巴
      

  2.   

    YEAR,Month都是varchar2吗?
    或者说year,month中有特殊字符
      

  3.   

    是不是环境不一样造成的,我们的其中一个环境也是可以的,而测试环境不行。
    两边的表结构,索引,授权这些都是一样的,
    不能SELECT到记录它应该会报:ORA-01403: 未找到数据
    ORA-06512: 在line 5我把正式环境的这个PROCEDURE拷到测试环境执行一样编译不通过。报错:LINE/COL ERROR
    -------- -------------------------------------------------
    20/16    PLS-00103: 出现符号 ","在需要下列之一时:  from  
    20/32    PLS-00103: 出现符号 ","在需要下列之一时:  from
      

  4.   

    YEAR VARCHAR2(4)
    MONTH VARCHAR2(2)
    没有什么特殊字符啊,我做下边的操作能成功的:SELECT YEAR, MONTH FROM BASE_SERIALNO WHERE ROWNUM = 1;YEAR MONTH
    ---- -----
    2002 11
      

  5.   

    你把过程中的所有的空格和符号“‘”“,”
    重新用半角字符输入。然后运行。SQL> DECLARE
      2  A VARCHAR2(10);
      3  B VARCHAR2(10);
      4  BEGIN
      5  SELECT NVL('sss', 'ny'),NVL('AAAA','NC') INTO A, B
      6      FROM dual;
      7  END;
      8  /PL/SQL procedure successfully completed.
      

  6.   

    soniczck(城市农作物) 
    你这段代码不是在SQLPLUS中做的吧。在SQLPLUS中做做看,再贴出错误信息。就代码本身而言看不出问题,我怎么试也试不出你的错误信息。
      

  7.   

    to:jsnicle(js_nicle),问题应该不是全角半角的原因,可能是出在MONTH和YEAR上。to: ORARichard(没钱的日子......) 我是在PL/SQL DEVELPER 中做的,但在SQLPLUS中执行也报错,代码是没有问题,因为我在另一环境中运行正常。所以我觉得是不是环境那儿设置的不同,请大家支支招。sqlplus运行:
    SQL> DECLARE
      2    A VARCHAR2(10);
      3    B VARCHAR2(10);
      4  BEGIN
      5    SELECT NVL(YEAR, 'ny'), NVL(MONTH, 'nm')
      6      INTO a, b
      7      FROM BASE_SERIALNO
      8      WHERE ROWNUM =1;
      9  END;
     10  /
      SELECT NVL(YEAR, 'ny'), NVL(MONTH, 'nm')
                     *
    ERROR 位于第 5 行:
    ORA-06550: 第 5 行, 第 18 列:
    PLS-00103: 出现符号 ","在需要下列之一时:
    from
    ORA-06550: 第 5 行, 第 36 列:
    PLS-00103: 出现符号 ","在需要下列之一时:
    from
     
      

  8.   

    确实是MONTH和YEAR的问题
    DECLARE
      A VARCHAR2(10);
      B VARCHAR2(10);
    BEGIN
      SELECT NVL("YEAR", 'ny'), NVL("MONTH", 'nm')
        INTO a, b
        FROM BASE_SERIALNO
        WHERE ROWNUM =1;
    END;
    /
    这样就没问题了
      

  9.   

    TO:qiaozhiwei(乔) ,我进两个环境的用的是同一用户,表也是当前用户的。应该不会是这个原因吧?TO:ORARichard(没钱的日子......) ,你这个方法我也试过,是可以的,我主要想知道,MONTH和YEAR没加双引号或者表名时,我们的正式环境就可以,而测试环境就不行。
      

  10.   

    在各环境下的SQLPLUS中
    show all
    看看有什么项不一样
      

  11.   

    TO:ATGC(想到南极去看看飞翔的海鸥,我觉得不是你说的这个原因,如果是建表时加了双引号的话,那查询时就必须加引号才行的,可是下边几条SQL我试了都能查询出数据(至少大小没有影响)。
    SELECT YEAR, MONTH FROM BASE_SERIALNO WHERE ROWNUM = 1;
    SELECT year, month FROM BASE_SERIALNO WHERE ROWNUM = 1;
    SELECT BASE_SERIALNO.YEAR, BASE_SERIALNO.MONTH FROM BASE_SERIALNO WHERE ROWNUM = 1;TO:ORARichard(没钱的日子......) SHOW ALL后的数据只有release不同
    能运行上面SQL的环境: release 801070100
    不能运行上面SQL的环境:release 801070000
    不知道是不是这个原因?
    顺便再问你一下:(,SHOW ALL后出来参数有 instance "local" ,我想问这个instance 的值怎么会是"local",而不是我的数据库实例名 HHDVP ??
      

  12.   

    估计是版本的原因,我和你的版本release 801070000是一样的,有同样的问题instance "local"这个也是一样的
      

  13.   

    那为什么我COPY了你的语句在我的机器上一点问题也没有呢?
      

  14.   

    啊,看来版本原因的可能性比较大,而且主要可能还是NVL函数引起的。关于instance "local"这个值有没有什么说明??
      

  15.   

    NVL函数引起的。不是这个函数引起的,你试试任何函数都不行。(当然要在存储过程中,直接用SQL语句是没问题的)
      

  16.   

    TO:ATGC(想到南极去看看飞翔的海鸥),是不是你的版本比我们的高?是ORARichard(没钱的日子......) 说的情况,不知你们在官方文档上有没有看到这个BUG号:),我到ORACLE网站上没找到,主要是E文不熟:)查了一下INSTANCE的值是,INSTANCE  [instance_path|LOCAL] 但还是没找到答案。
      

  17.   

    year,month是oracle的保留字,所以不能直接使用
      

  18.   

    先清空表BASE_SERIALNO,再执行看看year,month是保留字,用双引号"year","month"