当前位置: 代码迷 >> DB2 >> 求简单db2动态语句?大侠们要给力吗?该怎么处理
  详细解决方案

求简单db2动态语句?大侠们要给力吗?该怎么处理

热度:7833   发布时间:2013-02-26 00:00:00.0
求简单db2动态语句?大侠们要给力吗?
SQL code
 现在有如下需求: 有一个存储过程 create procedure proc_test(in tbname varchar(128)) begin  如果 tbname 存在      删除表名称,创建的新的表。   如果 tbname 不存在    创建该表        end

解释 tbname 可以正对多长表,所有是变量。

据小弟了解 静态sql 中表的名称好像不能是变量。
在动态sql 可以。
请问 在动态sql 中 可以嵌入if语句吗?

------解决方案--------------------------------------------------------
已下面这个table为例:
create table db2inst1.test (col_name int);
那么你的存储过程应该这样写:
SQL code
create procedure proc_test(in tab_schema varchar(128),in tab_name varchar(128))begindeclare sql_stmt  varchar(1024);if exists(select * from syscat.tables where tabschema=tab_schema and tabname=tab_name and type='T') thenset sql_stmt = 'drop table '||tab_schema||'.'||tab_name;prepare sx from sql_stmt;execute sx;commit;end if;set sql_stmt = 'create table ||tab_schema||'.'||tab_name||'(col_name int)';prepare sx from sql_stmt;execute sx;commit;end;
------解决方案--------------------------------------------------------
上面写掉了一个单引号,应该下面这样:
SQL code
create procedure proc_test(in tab_schema varchar(128),in tab_name varchar(128))begindeclare sql_stmt  varchar(1024);if exists(select * from syscat.tables where tabschema=tab_schema and tabname=tab_name and type='T') then  set sql_stmt = 'drop table '||tab_schema||'.'||tab_name;  prepare sx from sql_stmt;  execute sx;  commit;end if;set sql_stmt = 'create table' ||tab_schema||'.'||tab_name||'(col_name int)';prepare sx from sql_stmt;execute sx;commit;end;commit;
  相关解决方案