在我的脚本中,我必须对连接表进行大量选择,因此我决定将此连接放入时态表中。
首先我想:
1. Create table
2. Put the data from the join into a table
3. Drop the table
但后来我想,如果在我放弃桌子之前脚本失败怎么办?
所以我决定选择:
1. Drop the table
2. Create the table
3. Put the data from the join into a table
我真的不介意在下次运行脚本之前是否将表保留在那里,所以第二个选项也可以。
但是,如果有人已经放弃了桌子怎么办?
我看到一些系统有“drop if if exists”但不幸的是没有DB2。我想做一些在drop table失败时不会使脚本死掉的事情。
想法?在任何一个?谢谢!
编辑:我忘了说这是PERL脚本!答案 0 :(得分:1)
执行此操作的最佳方法是使用此code
中的匿名阻止您需要在动态sql中调用drop table,并在块中捕获异常。
--#SET TERMINATOR @
begin
declare statement varchar(128);
declare continue handle for sqlstate '42710' BEGIN END;
SET STATEMENT = 'DROP TABLE MYTABLE';
EXECUTE IMMEDIATE STATEMENT;
end @
此代码将在DB2中正常运行。它不需要是程序的一部分也不是函数。
答案 1 :(得分:0)
为什么不先找桌子?如果你发现它,它需要被删除;如果你不这样做,那就没有了。
答案 2 :(得分:0)
db2perf_quiet_drop可能会按你想要的方式工作..它是一个免费的附加组件:)
你也可以查看这篇文章..
http://www.dbforums.com/showthread.php?1609047-DB2-equivalent-for-mysql-s-DROP-TABLE-IF-EXISTS
如果这对您不起作用,请告诉我您的错误,以便我可以尝试帮助:)
或者这可能有效
if(NOT exists(创建表详细信息)
(
id int,
detaildeptNo int,
info varchar(255)
);
插入detailval(1,1,'详细值A');
插入detailval(2,1,'细节值B');
插入detailval(3,1,'细节值C');
插入detailval(4,2,'细节值D');
)
)
then customStoredproc('droptable');
结束如果;
结束
答案 3 :(得分:0)
我认为您应该考虑使用临时表( DECLARE GLOBAL TEMPORARY TABLE )。它们存储在临时表空间中,并在提交后自动删除。
您也可以轻松查询syscat.tables,如下所示:
select COUNT(*) from SYSCAT.TABLES where TRIM(TABNAME) = '<some_table_name>'
如果此查询返回0,则该表不存在。