【问题标题】:How to create 'Macro' in netezza sql如何在 netezza sql 中创建“宏”
【发布时间】:2015-08-23 23:05:12
【问题描述】:

除了使用不同年份的数据外,我必须使用相同的命令创建多个表。例如:

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

提前致谢!

【问题讨论】:

    标签: sql macros netezza


    【解决方案1】:

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

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

    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 的文档。

    【讨论】:

      【解决方案2】:

      即使有一种方法(我不知道有一种方法),这似乎更像是文本编辑器的一项任务。退房

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

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

      【讨论】:

        猜你喜欢
        • 2017-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多