- 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;