open   recur for SELECT DJBH,
             decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
             decode(DJLX,2,(select  ZXRQ from JHD where JLBH=A.DJBH),
             3,(select ZXRQ from THCL where JLBH=A.DJBH),
             9,(select ZXRQ from JJBJD where JLBH=A.DJBH)) "DJRQ",
            JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
           (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
        FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0;
存储过程中这句编译不过去,但是单独运行
SELECT DJBH,
             decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
             decode(DJLX,2,(select  ZXRQ from JHD where JLBH=A.DJBH),
             3,(select ZXRQ from THCL where JLBH=A.DJBH),
             9,(select ZXRQ from JJBJD where JLBH=A.DJBH)) "DJRQ",
            JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
           (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
        FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0
没有问题 。
   我把第二个docode里的sql语句用单引号扩起来就可以了。
就是改成这样:
open   recur for SELECT DJBH,
             decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
             decode(DJLX,2,‘(select  ZXRQ from JHD where JLBH=A.DJBH)’,
             3,‘(select ZXRQ from THCL where JLBH=A.DJBH)’,
             9,‘(select ZXRQ from JJBJD where JLBH=A.DJBH)’) "DJRQ",
            JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
           (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
        FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0;
这是为什么啊

解决方案 »

  1.   

    怎么又问啊,刚才看见过了,存储过程里单独写select一定要跟into的,要么你定义一个游标,在游标里写这句select 语句就对了。
      

  2.   

    recur 就是我定义的游标变量,我用的是open recur for 啊
      

  3.   

    那可能是open recur for 的语法不对
      

  4.   

    哦,明白你的意思了,前面理解错误,呵呵。ZXRQ是不是日期型的?
      

  5.   

    问题是我单独执行:
    SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,‘(select  ZXRQ from JHD where JLBH=A.DJBH)’,
                 3,‘(select ZXRQ from THCL where JLBH=A.DJBH)’,
                 9,‘(select ZXRQ from JJBJD where JLBH=A.DJBH)’) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0
    是没有问题的呀
      

  6.   

    open   recur for SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,‘(select  ZXRQ from JHD where JLBH=A.DJBH)’,
                 3,‘(select ZXRQ from THCL where JLBH=A.DJBH)’,
                 9,‘(select ZXRQ from JJBJD where JLBH=A.DJBH)’) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0;
    是对的?
      

  7.   

    open   recur for SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,‘(select  ZXRQ from JHD where JLBH=A.DJBH)’,
                 3,‘(select ZXRQ from THCL where JLBH=A.DJBH)’,
                 9,‘(select ZXRQ from JJBJD where JLBH=A.DJBH)’) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0;
    是不对的
      

  8.   

    单独执行
    SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,‘(select  ZXRQ from JHD where JLBH=A.DJBH)’,
                 3,‘(select ZXRQ from THCL where JLBH=A.DJBH)’,
                 9,‘(select ZXRQ from JJBJD where JLBH=A.DJBH)’) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0
    是对的
      

  9.   

    错了
    open   recur for SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,‘(select  ZXRQ from JHD where JLBH=A.DJBH)’,
                 3,‘(select ZXRQ from THCL where JLBH=A.DJBH)’,
                 9,‘(select ZXRQ from JJBJD where JLBH=A.DJBH)’) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0;
    是对的
      

  10.   

    open   recur for?recur是什么?好像没这种语法
      

  11.   

    你没理解我的意思呀。
    我需要的是这样的呀
    open   recur for SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,(select  ZXRQ from JHD where JLBH=A.DJBH),
                 3,(select ZXRQ from THCL where JLBH=A.DJBH),
                 9,(select ZXRQ from JJBJD where JLBH=A.DJBH)) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0;
      

  12.   

    open   recur for SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,‘(select  ZXRQ from JHD where JLBH=A.DJBH)’,
                 3,‘(select ZXRQ from THCL where JLBH=A.DJBH)’,
                 9,‘(select ZXRQ from JJBJD where JLBH=A.DJBH)’) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0;
    的结果是你想要的?是的话不就结了。
      

  13.   

    cursir  recur  is  SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,(select  ZXRQ from JHD where JLBH=A.DJBH),
                 3,(select ZXRQ from THCL where JLBH=A.DJBH),
                 9,(select ZXRQ from JJBJD where JLBH=A.DJBH)) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0
    然后再打开recur,这样行不行?
      

  14.   

    打错字了cursor recur  is  SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,(select  ZXRQ from JHD where JLBH=A.DJBH),
                 3,(select ZXRQ from THCL where JLBH=A.DJBH),
                 9,(select ZXRQ from JJBJD where JLBH=A.DJBH)) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0
    还是不行的话,那SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,(select  ZXRQ from JHD where JLBH=A.DJBH),
                 3,(select ZXRQ from THCL where JLBH=A.DJBH),
                 9,(select ZXRQ from JJBJD where JLBH=A.DJBH)) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0
    报不报错的?
      

  15.   

    SELECT DJBH,
                 decode(DJLX,2,'进货',3,'退火',9, '手发挥') "DJLX",
                 decode(DJLX,2,(select  ZXRQ from JHD where JLBH=A.DJBH),
                 3,(select ZXRQ from THCL where JLBH=A.DJBH),
                 9,(select ZXRQ from JJBJD where JLBH=A.DJBH)) "DJRQ",
                JSJE_BHS,(ZZSJE_17+ZZSJE_13+ZZSJE_QT) "ZZSJE",
               (JSJE_BHS+ZZSJE_17+ZZSJE_13+ZZSJE_QT) "JSJE_HS"
            FROM JXJSD_DJH A WHERE JLBH=27143 and DJLX<=9 and JSJE_BHS<>0是不报错的。