第一个
select EHAUDITDATE into dtEhauDate   --取得审核时间 
             EHID into nEhid  from DIP_EXCEL_HEADER 
             where OTID=nSourceID 
             and HSID=4 
             and Etid=1301 --数据类型为销售(这是个问题点。)
             and EHFREETLDATE=ntemp;第二个 insert into DCT_EXCEL_SALES_SCRIPT_MONTH (
              sid,
              sourceid,
              useno,
              filedate,
              salesdate,
              customid,
              customname,
              goodsid,
              goodstype,
              factoryname,
              goodsunit,
              lotno,
              proddate,
              invaliddate,
              goodsqty,
              unitprice,
              total_line,
              databatchid,
              datacount,
              datastate)
              select SEQ_DATA_sales.nextval,
                    nSourceID,                           --数据来源
                     szUseNo,                            --逻辑时间周期号
                     dtEhauDate,                         --审核时间
                     case                                --查询是否有异常的销售日期,如果有用3000-1-1日标记
                     when salesdate is null then         --空值为异常
                       TO_date('3000-01-01 00:00:00',
                                'YYYY-MM-DD HH24:MI:SS')
                     when salesdate < dtStartDate then   --销售日期早于任务起始日期为异常
                          TO_date('3000-01-01 00:00:00',
                                'YYYY-MM-DD HH24:MI:SS')
                     when salesdate >dtEndDate then      --销售日期晚于任务结束日期为异常
                           TO_date('3000-01-01 00:00:00',
                                'YYYY-MM-DD HH24:MI:SS')
                      else salesdate                     --如果在起始日期,截止日期之内的为正常数据,正常采集
                     end                     
                     customid,                           --客户ID
                     customname,                         --客户姓名
                     goodsid,                            --货品ID
                     goodsname,                          --货品名称
                     goodstype,                          --规格
                     factoryname,                        --生产厂家
                     goodsunit,                          --计量单位
                     lotno,                              -- 批号
                     proddate,                           --生产日期
                     invaliddate,                        --有效期至
                     goodsqty,                           --数量
                     unitprice,                          --单价
                     total_line,                         --金额
                     nDataBatchID,                       --数据批次ID
                     count(1) into nCountTemp ,          --数据行数
                     0                                   --数据抽取状态,默认为0
                     from
                     DIP_DATA_SALES
                     where
                     EHID=nEhid;
                     
这2个SQL都有错。。第2个SQL的问题是我想SELECT的数据 一口气导入到目标表, 并且记录SELECT的次数

解决方案 »

  1.   

    select EHAUDITDATE,EHID into dtEhauDate ,  --取得审核时间 
                 nEhid  from DIP_EXCEL_HEADER 
                 where OTID=nSourceID 
                 and HSID=4 
                 and Etid=1301 --数据类型为销售(这是个问题点。)
                 and EHFREETLDATE=ntemp;
      

  2.   

    第二个要将into..去掉
    select 的次数是什么意思
    如果是要取插入的记录数,可以根据sql%rowcount来取
    在insert语句后
    nCountTemp:=sql%rowcount;
      

  3.   

    可是我要取这个2个字段的值分别放到 dtEhauDate nEhid  
      

  4.   

    多问一个
    PL/SQL
    IF...THENELSEEND IF 
    可以这么用不
      

  5.   

    FUNCTION DIPGF.F_DCT_EXCEL_SALES_EXT_M 编译错误错误:PLS-00103: 出现符号 "ELSE"在需要下列之一时:
            begin case declare exit
              for goto if loop mod null pragma raise return select update
              while with <an identifier>
              <a double-quoted delimited-identifier> <a bind variable> <<
              close current delete fetch lock insert open rollback
              savepoint set sql execute commit forall merge
              <a single-quoted SQL string> pipe
    行:154
    文本:else这个错是什么意思
      

  6.   

    是不是else前面的语句没有加分号
      

  7.   

    if a>b then
    dbms_output.put_line(a);
    elsif a=b then
    null;
    else
    dbms_output.put_line(b);
    end if;参照下格式和符号。
    elsif和else子句可以不写
      

  8.   

     if dtFileDate>=dtEhauDate then --当底稿表中的采集时间要晚于审核时间时,无需抽取数据,早于以及采集时间为空值均抽取
                  /* nRCTmp     := F_DCT_CLEAN_LOG_DTL(p_clid,
                                                1,
                                                0,
                                                '数据来源'||to_char(nSourceID)||'逻辑周期号'||szUseNo||'不是最新数据无需抽取');
               */
               
               
               
              
               else  --这里提示错误
              -----
              end if;
    错误就是 
    错误:PLS-00103: 出现符号 "ELSE"在需要下列之一时: 
            begin case declare exit 
              for goto if loop mod null pragma raise return select update 
              while with <an identifier> 
              <a double-quoted delimited-identifier> <a bind variable> < < 
              close current delete fetch lock insert open rollback 
              savepoint set sql execute commit forall merge 
              <a single-quoted SQL string> pipe 
    行:154 
    文本:else 
      

  9.   

    then和else
    及else和end if;
    之间不能为空
    如果没有要执行的代码
    则要填充null;
      

  10.   


      if dtFileDate>=dtEhauDate then --当底稿表中的采集时间要晚于审核时间时,无需抽取数据,早于以及采集时间为空值均抽取
                  /* nRCTmp     := F_DCT_CLEAN_LOG_DTL(p_clid,
                                                1,
                                                0,
                                                '数据来源'||to_char(nSourceID)||'逻辑周期号'||szUseNo||'不是最新数据无需抽取');
               */
               
               
               
              
               else            
                
                 --如果采集时间早于审核时间,或者底稿表采集时间为空值则进行抽取
                /*begin
                
                  select seq_dct_data_batchid.nextval into nDataBatchID from dual;--获得数据批次号
                  
                  insert into DCT_EXCEL_SALES_SCRIPT_MONTH (
                  sid,
                  sourceid,
                  useno,
                  filedate,
                  salesdate,
                  customid,
                  customname,
                  goodsid,
                  goodstype,
                  factoryname,
                  goodsunit,
                  lotno,
                  proddate,
                  invaliddate,
                  goodsqty,
                  unitprice,
                  total_line,
                  databatchid,
                  datacount,
                  datastate)
                  select SEQ_DATA_sales.nextval,
                        nSourceID,                           --数据来源
                         szUseNo,                            --逻辑时间周期号
                         dtEhauDate,                         --审核时间
                         case                                --查询是否有异常的销售日期,如果有用3000-1-1日标记
                         when salesdate is null then         --空值为异常
                           TO_date('3000-01-01 00:00:00',
                                    'YYYY-MM-DD HH24:MI:SS')
                         when salesdate < dtStartDate then   --销售日期早于任务起始日期为异常
                              TO_date('3000-01-01 00:00:00',
                                    'YYYY-MM-DD HH24:MI:SS')
                         when salesdate >dtEndDate then      --销售日期晚于任务结束日期为异常
                               TO_date('3000-01-01 00:00:00',
                                    'YYYY-MM-DD HH24:MI:SS')
                          else salesdate                     --如果在起始日期,截止日期之内的为正常数据,正常采集
                         end                     
                         customid,                           --客户ID
                         customname,                         --客户姓名
                         goodsid,                            --货品ID
                         goodsname,                          --货品名称
                         goodstype,                          --规格
                         factoryname,                        --生产厂家
                         goodsunit,                          --计量单位
                         lotno,                              -- 批号
                         proddate,                           --生产日期
                         invaliddate,                        --有效期至
                         goodsqty,                           --数量
                         unitprice,                          --单价
                         total_line,                         --金额
                         nDataBatchID,                       --数据批次ID
                     
                         0                                   --数据抽取状态,默认为0
                         from
                         DIP_DATA_SALES
                         where
                         EHID=nEhid;
                         
                        
                         --STEP 5 修改异常数据的抽取状态-1(异常数据)整月的数据在底稿表中修改为异常数据
                         
                         --查询是否有异常数据
                         select count(1) into nctemp from DCT_EXCEL_SALES_SCRIPT_MONTH where databatchid = nDataBatchID
                         and sourceid = nSourceid
                         and useno = szUseNo
                         and datastate = 0
                         and salesdate= TO_date('3000-01-01 00:00:00',
                                    'YYYY-MM-DD HH24:MI:SS');
                                    
                         if nctemp >0 then
                         
                           update DCT_EXCEL_SALES_SCRIPT_MONTH    --销售日期中标有异常销售日期的数据
                           set datastate = -1
                           where databatchid = nDataBatchID
                           and sourceid = nSourceid
                           and useno = szUseNo;
                           
                           end if;
                        --STEP 6 对任务表中对应项目的采集次数+1
                      update dct_extraction_tab
                       set filesign = nvl(filesign, 0) + 1, filedate = dtNow
                          where id = nEid;
                          nRCTmp := F_DCT_CLEAN_LOG_DTL(p_clid,
                                                1,
                                                0,
                                                '数据来源'||to_char(nSourceID)||'逻辑周期号'||szUseNo||'抽取任务完成');
                        
                        nCountTemp:= nCountTemp+1;--每一次采集成功后采集成功任务数
                        exception
                         when others Then
                            nErrCode   := SQLCODE;
                            szErrText  := substr(SQLERRM, 1, 500);
                            rollback work;
                            nRCTmp := F_DCT_CLEAN_LOG_DTL(p_clid, 2, nErrCode, szErrText);
                        
                   
                            end;*/
                          
                          
                          
                          commit work;
                   
      
                            
                         end if;--  if dtFileDate>=dtEhauDate
    完整代码