日期:2014-05-17  浏览次数:20855 次

在存储过程里给临时表加列
For cur_Review In( SELECT extractValue(value(t),'/item/@date') as d_date
                            From (select xmltype(a_date_xml) as recode from dual) x
                                  ,TABLE( xmlsequence (
                                          extract(x.recode,
                                                  '/data/item'))
                                       ) t)
               Loop
                 v_date:=cur_Review.d_date;
                 v_sql:='ALTER TABLE Temp_item_table ADD (col'||v_date||' varchar2(50));';                 
              End loop;
              execute   immediate v_sql;--执行添加列语句

--想法:循环游标,每次都添加一个列,最后执行下语句。然后就报错了。我跟踪了下,v_sql是这样的

ALTER TABLE Temp_item_table ADD (col20120018 varchar2(50));
ALTER TABLE Temp_item_table ADD (col20120019 varchar2(50));
ALTER TABLE Temp_item_table ADD (col20120020 varchar2(50));
ALTER TABLE Temp_item_table ADD (col20120021 varchar2(50));

这个是在存储过程里面执行的。

------解决方案--------------------
      v_sql:='ALTER TABLE Temp_item_table ADD (col'
------解决方案--------------------
v_date
------解决方案--------------------
' varchar2(50));';      
--把最后面的;去掉,改成
      v_sql:='ALTER TABLE Temp_item_table ADD (col'
------解决方案--------------------
v_date
------解决方案--------------------
' varchar2(50))';