第一个
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的次数
nEhid from DIP_EXCEL_HEADER
where OTID=nSourceID
and HSID=4
and Etid=1301 --数据类型为销售(这是个问题点。)
and EHFREETLDATE=ntemp;
select 的次数是什么意思
如果是要取插入的记录数,可以根据sql%rowcount来取
在insert语句后
nCountTemp:=sql%rowcount;
PL/SQL
IF...THENELSEEND IF
可以这么用不
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这个错是什么意思
dbms_output.put_line(a);
elsif a=b then
null;
else
dbms_output.put_line(b);
end if;参照下格式和符号。
elsif和else子句可以不写
/* 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
及else和end if;
之间不能为空
如果没有要执行的代码
则要填充null;
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
完整代码