当前位置: 代码迷 >> DB2 >> 【询问】DB2中是否有IF Exists用法?解决方法
  详细解决方案

【询问】DB2中是否有IF Exists用法?解决方法

热度:5019   发布时间:2013-02-26 00:00:00.0
【询问】DB2中是否有IF Exists用法?
在SQL   Server中,
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N '[dbo].[test] ')   and   OBJECTPROPERTY(id,   N 'IsView ')   =   1)
drop   view   [dbo].[vtest]
可以通过这种方式来查找数据库中是否有某个view,如果有就drop   (同样适用于表)

在DB2中,也有系统表,记录了所有视图、用户表的信息。但是怎样用if   exists来实现上面的要求呢   ?

谢谢大家!

------解决方案--------------------------------------------------------
CREATE PROCEDURE ADMINISTRATOR.ClearTest ( )
P1: BEGIN
IF EXISTS (select * from sysibm.systables where TID <> 0 and name = 'EDITBUS')THEN
drop table EDITBUS;
END IF;

END P1


--成功的例子,我试过的,连续执行两次返回的结果为:

------------------------------ 输入的命令 ------------------------------
CALL CLEARTEST()!
------------------------------------------------------------------------------
CALL CLEARTEST()

返回状态 = 0


------------------------------ 输入的命令 ------------------------------
CALL CLEARTEST()!
------解决方案--------------------------------------------------------
我测试没有问题啊
CREATE PROCEDURE ExistsTest(IN TableName varchar(50),OUT iReturn int)
LANGUAGE SQL 
P1: BEGIN 
DECLARE stmt VARCHAR(200);
IF EXISTS (select * from sysibm.systables where TID <> 0 and name = TableName ) THEN
set stmt ='drop table '|| TableName; 
PREPARE s1 FROM stmt;
EXECUTE s1;
set iReturn =0;
else
set iReturn =-1;
END IF; 
END P1@ 

db2 => call ExistsTest('EMPLOYEE3',?)@

输出参数的值
--------------------------
参数名: IRETURN
参数值: -1

返回状态 = 0

db2 => create table employee3 like employee@
DB20000I SQL 命令成功完成。
db2 => call ExistsTest('EMPLOYEE3',?)@

输出参数的值
--------------------------
参数名: IRETURN
参数值: 0

返回状态 = 0

  相关解决方案