- 论坛徽章:
- 0
|
我在CLP中编译了下面的SQL存储过程,CLP中显示的是编译成功的信息,该信息为“DB20000I The SQL command completed successfully.”。
我的编译命令为db2 -td@ -vf d:\append_by_date.db2,在执行该命令前我已经连接了我的开发数据库(db2 connect to develop user db2admin using db2admin)。但是当我打开我的SPB程序时我却没有发现我编译成功的存储过程,我记得以前都可以啊。请高手指点!!
d:\append_by_date.db2文件的内容如下
--文件名称:append_by_date.db2
--目 标:根据源表中的时间戳以追加的方式把源表中的数据加载到目标表中
--摘 要:调用接口中各个参数的意义如下
-- source 源表(包含schema名)
-- target 目标表(包含schema名),所有目标表的最后一个字段都为数据的加载时期,目
-- 标表中除最后一个字段以外其它字段与源表中的字段完全对应
-- s_datevar 源表数据的上报年月
-- t_etldate 目标表中代表抽取日期的字段名
-- t_datevar 某年月,正式加载前要删除该年月的数据(格式为yyyy-mm),该字段用于从新加载某年月已经加载的数据
-- error_code SQL语句执行过程中产生的错误码,该错误码等于SQL语句出错时的SQLCODE值
-- error_label SQL语句执行过程中产生的错误信息,该信息由应用本身定义,用于查找出错位置
--调用例子:
--当前版本:1.0
--作 者:周海明
--完成日期:2003-03-02
--取代版本:
--原作者 :
--完成日期:
create procedure append_by_date(in source varchar(12 ,
in target varchar(12 ,
in s_datevar int,
in t_etldate varchar(12 ,
in t_datevar char(7),
out error_code integer,
out error_label varchar(254))
language sql
begin
declare SQLCODE integer default 0;
declare stmt varchar(32672);
declare at_end int default 0;
declare col_name varchar(12 ;
declare all_col varchar(32672);
declare c1 cursor for
select colname
from syscat.columns
where tabschema = ucase(substr(source, 1, posstr(source, '.') - 1))
and tabname = substr(source, posstr(source, '.') + 1, length(source))
order by colno;
declare EXIT HANDLER FOR SQLEXCEPTION
set error_code = SQLCODE;
declare CONTINUE HANDLER FOR NOT FOUND
set at_end = 1;
set error_code = 0;
set all_col = '';
set stmt = 'delete from '||target||
' where '||t_etldate||'='''||t_datevar||'''';
set error_label = 'The position of the error raised is 0001.';
prepare ps from stmt;
set error_label = 'The position of the error raised is 0002.';
execute ps;
set at_end=0;
open c1;
fetch c1 into col_name;
while at_end = 0 do
set all_col = all_col||col_name||',';
fetch c1 into col_name;
end while;
close c1;
set stmt = 'insert into '||target||' select '||all_col||''''||substr(char(current date, iso), 1, 7)||
''' from '||source;
set error_label = 'The position of the error raised is 0003.';
prepare ps from stmt;
set error_label = 'The position of the error raised is 0004.';
execute ps;
set error_label = '';
end @ |
|