如何在 netezza sql 中创建“宏”

Posted

技术标签:

【中文标题】如何在 netezza sql 中创建“宏”【英文标题】:How to create 'Macro' in 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次。那么有没有办法简化这个过程,比如写一个宏?

提前致谢!

【问题讨论】:

【参考方案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】:

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

Notepad++ Vim

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

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

【讨论】:

以上是关于如何在 netezza sql 中创建“宏”的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Aginity 工作台检查在 IBM Netezza SQL 中创建表的数据和时间

在 IBM netezza sql server 中创建唯一的主键?

无法在 netezza 中创建表

如何在netezza中找到组织表格的列?

如何在 Access 2010 中创建自定义 ID

pypyodbc 从 python 在 netezza 数据库中创建存储过程的错误