如何在 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 中创建表的数据和时间