2014-02-05 47 views
0

我需要創建一個像YEAR_名稱表的變量值創建表(在這裏不用變量值)時在一個循環中,在DB2

我有一年的數字表(2010,2012,2014)。我想拿這些並創建表YEAR_2010,YEAR_2012和YEAR_2014。

這需要在一個循環內完成。

我試圖做這樣的:

CREATE TABLE TEMP_YEAR 
    ( YEAR_COLUMN integer 
    ); 


INSERT INTO temp_year 
    (year_column) 
    ( 
    select extract(year from datum) from datetest 
); 

BEGIN 
FOR vl AS 
c1 cursor for 
    SELECT year_column FROM temp_year 
    DO 

    EXEC SQL execute immediate 'create table YEAR_' || year_column || ' (year integer, name varchar2(50)); 
END FOR; 


    END; 
/

drop table temp_year; 

的第一次創建工作,以便爲插入。剩下的就搞亂了。

它始於此錯誤消息(德國翻譯):

EXEC SQL execute immediate 'create table YEAR_' || year_column || ' (year integer, name varchar2(50)) 
DB21034E SQL statement is wrong. 
SQL0104N On "   EXEC" follows the invalid Token "SQL". Allowed tokens could be: ":". LINE NUMBER=7. SQLSTATE=42601 

我們的目標是與年份數字的幫助下創建的表。

任何想法?

在此先感謝。

+0

對我來說,這聽起來不像一個好的設計,每年都有獨立的桌子。一年中只有一張桌子有場地會更好。然後使用SQL語句來收集所需的信息。 – Linger

+0

我需要那些年表。他們需要像這樣退後一步。這些都是巨大的桌子。 – Thevagabond

+0

[DB2創建表X時X是變量?]的可能的副本(http://stackoverflow.com/questions/8696351/db2-create-table-x-when-x-is-a-variable) – 2014-02-05 14:15:40

回答

0

OK 1的問題,我只是去了就知道今天是PL/SQL被禁用,一直呆在那樣的所以在這裏,現在它是如何工作對我來說:

(更改結束指示器爲@)

只有一次拿到臨時表:

CREATE TABLE TEMP_YEAR 
    ( YEAR_COLUMN NUMBER 
    )@ 

下面是該過程

CREATE or replace PROCEDURE Year_tab_create() 
    LANGUAGE SQL 
BEGIN 
DECLARE sqlStmt VARCHAR(32672); 
DECLARE v_numRecords INT DEFAULT 1; 
DECLARE v_year INT DEFAULT 0; 
DECLARE v_counter INT DEFAULT 0; 

DECLARE c1 CURSOR FOR 
    select year_column from temp_year; 


INSERT INTO temp_year 
    (year_column) 
    ( 
    select distinct extract(year from datum) from datetest 
); 

SELECT COUNT(*) INTO v_numRecords FROM temp_year; 

OPEN c1; 
WHILE v_counter < (v_numRecords) 
DO 
    FETCH c1 INTO v_year; 
    set sqlStmt = 'create table YEAR_' || v_year || ' (year integer, name varchar(50))'; 
    EXECUTE IMMEDIATE sqlStmt; 
    SET v_counter = v_counter + 1; 
END WHILE; 
CLOSE c1; 
delete from temp_year; 
END 
@ 

希望這也許可以幫助別人。