2015-08-23 3 views
2

Мне нужно создать несколько таблиц с использованием тех же команд, за исключением использования разных данных года. Например:Как создать «Макро» в netezza sql

create temp table test_2002 as 
    select * 
    from claim 
    where purchase_year = '2002'; 

    create temp table test_2003 as 
    select * 
    from claim 
    where purchase_year = '2003'; 

    ..... 

Я хочу создать 10 таблиц, таких как test_2002, test2003, test2004 и т.д. Но я не хочу, чтобы повторно писать в 10 раз. Итак, есть ли способ упростить процесс, например написать макрос?

Заранее благодарен!

ответ

1

Если вы не можете использовать макро функции хороший текстовый редактор для генерации текста (который является то, что вы, вероятно, следует делать), и абсолютно должны сделать это полностью с чем-то вы можете позвонить из интерфейса SQL на Netezza, то хранимая процедура - ваша единственная надежда.

Здесь процедура образец хранится ...

CREATE OR REPLACE PROCEDURE SP_CREATE_LOOP(INTEGER, INTEGER) 
RETURNS INTEGER 
LANGUAGE NZPLSQL AS 
BEGIN_PROC 
DECLARE 
    pStartVal ALIAS FOR $1; 
    pCount ALIAS FOR $2;  
    vSQL varchar(30000); 

BEGIN 

for i in 1 .. pCount LOOP 
    vSQL := 'CREATE TABLE CLAIM_' || pStartVal + i-1 || ' as SELECT * from CLAIM WHERE PURCHASE_YEAR = ' || pStartVal + i-1 || ';'; 
    EXECUTE IMMEDIATE vSQL; 
END LOOP; 

END; 
END_PROC; 

..и то, что он создает.

TESTDB.ADMIN(ADMIN)=> \d 
     List of relations 
Schema | Name | Type | Owner 
--------+-------+-------+------- 
ADMIN | CLAIM | TABLE | ADMIN 
(1 row) 

TESTDB.ADMIN(ADMIN)=> exec SP_CREATE_LOOP(2000,5); 
SP_CREATE_LOOP 
---------------- 

(1 row) 

TESTDB.ADMIN(ADMIN)=> \d 
      List of relations 
Schema | Name | Type | Owner 
--------+------------+-------+------- 
ADMIN | CLAIM  | TABLE | ADMIN 
ADMIN | CLAIM_2000 | TABLE | ADMIN 
ADMIN | CLAIM_2001 | TABLE | ADMIN 
ADMIN | CLAIM_2002 | TABLE | ADMIN 
ADMIN | CLAIM_2003 | TABLE | ADMIN 
ADMIN | CLAIM_2004 | TABLE | ADMIN 
(6 rows) 

Вы можете найти документацию для Stored Procedures in Netezza here.

1

Даже если бы был способ (я не знаю одного), это похоже на задачу для текстового редактора. Проверьте

Или, если вы действительно отчаянным, просто использовать эту формулу в Excel после перетаскивания 10 строк лет.

="create temp table test_" & A1 & " as select * from claim where purchase_year = '" & A1 & "';" 
Смежные вопросы