您的位置:程序门 -> db2 -> 数据库开发



【询问】db2中是否有if exists用法?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


【询问】db2中是否有if exists用法?
发表于:2007-08-20 11:26:29 楼主
在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来实现上面的要求呢   ?

谢谢大家!
发表于:2007-08-20 16:35:391楼 得分:0
发表于:2007-08-20 16:37:342楼 得分:0
if   exists   (
                )then
               
//do   your   job


                end   if;
发表于:2007-08-20 16:51:543楼 得分:0
那可是我  
if   exists   (select   *   from   test)   then  
  insert   into   ttt(id)   values   (generate_unique())
end   if;

怎么不能运行   ?说不是有效的“命令行处理器”命令
发表于:2007-08-21 13:30:144楼 得分:0
用这个insert   into   ttt(id)   values   (generate_unique())   where   exists   (select   *   from   test)试一下。

http://blog.csdn.net/huoyin/archive/2007/06/05/1639096.aspx
发表于:2007-08-21 18:58:535楼 得分:0
if   exists   (select   *   from   test)   then  
  insert   into   ttt(id)   values   (generate_unique());
end   if;

加分号
发表于:2007-08-22 09:25:216楼 得分:0
加了分号好像也不行   ……

db2中在sql语句中支持   if   exists这种写法马?
发表于:2007-11-09 14:46:157楼 得分:0
不行的,如果表存在,是可以的。但是如果表没有的话,就会报错!
发表于:2007-11-09 15:13:358楼 得分:0
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()!
发表于:2007-11-09 16:27:019楼 得分:0
我测试没有问题啊
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

发表于:2007-11-25 20:35:5510楼 得分:0
写存储过程吧


快速检索

最新资讯
热门点击