如何在 netezza sql 中创建 'Macro'

How to create 'Macro' in 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次。那么有没有办法简化这个过程,比如写一个宏?

提前致谢!

即使有办法(我不知道有没有),这似乎更像是文本编辑器的一项任务。查看

  • Notepad++
  • Vim

或者,如果你真的很绝望,在拖动 10 行年份后,在 excel 中使用这个公式。

="create temp table test_" & A1 & " as select * from claim where purchase_year = '" & A1 & "';"

如果你不能使用一个好的文本编辑器的宏函数来生成文本(这可能是你应该做的),并且绝对必须完全用你可以从 SQL 调用的东西来完成Netezza 上的接口,那么存储过程是您唯一的希望。

这是一个示例存储过程...

CREATE OR REPLACE PROCEDURE SP_CREATE_LOOP(INTEGER, INTEGER)
RETURNS INTEGER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    pStartVal ALIAS FOR ;
    pCount ALIAS FOR ;    
    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 的文档。