如何在 Netezza 中声明变量?
how to declare a variable in Netezza?
我有一个 Netezza 查询,我在其中引用了一系列案例语句中的几个日期。我不想每次都替换所有这些日期,而是想在开头声明一个变量并在整个查询中使用它。在 SAS 中,我会这样做:
%LET end_p = '31DEC2014'd;
proc sql;
create table want as
select distinct id,
sum(case when (INCUR_DT) >= (&end_p-30)
and ip_op_cd = 'IP'
then net_allow_at else 0 end) as ip_d_30,
sum(case when (INCUR_DT) >= (&end_p-90)
and ip_op_cd = 'IP'
then net_allow_at else 0 end) as ip_d_90,
sum(case when (INCUR_DT) >= (&end_p-180)
and ip_op_cd = 'IP'
then net_allow_at else 0 end) as ip_d_180,
...
遗憾的是,在 Netezza 中没有过程性 SQL 扩展允许您使用像这样的变量作为 SQL 语言本身的一部分。纯粹的 SQL 解决方案会涉及一些问题,例如加入 CTE 返回那个值。但是,NZSQL CLI 确实允许使用会话变量,Aginity Workbench.
也是如此。
一个使用 NZSQL 的例子。请注意内部单引号的转义以将变量用作文字。
TESTDB.ADMIN(ADMIN)=> \set TVAR '\'foo\''
TESTDB.ADMIN(ADMIN)=> select :TVAR;
?COLUMN?
----------
foo
(1 row)
TESTDB.ADMIN(ADMIN)=> create table test_table (col1 bigint);
CREATE TABLE
TESTDB.ADMIN(ADMIN)=> insert into test_table values (123);
INSERT 0 1
TESTDB.ADMIN(ADMIN)=> \set TCOL 'COL1'
TESTDB.ADMIN(ADMIN)=> select :TCOL from test_table;
COL1
------
123
(1 row)
Aginity 会在看到 $var_name 时自动提示输入值,但至少据我所知,没有硬编码该变量定义的功能。
我有一个 Netezza 查询,我在其中引用了一系列案例语句中的几个日期。我不想每次都替换所有这些日期,而是想在开头声明一个变量并在整个查询中使用它。在 SAS 中,我会这样做:
%LET end_p = '31DEC2014'd;
proc sql;
create table want as
select distinct id,
sum(case when (INCUR_DT) >= (&end_p-30)
and ip_op_cd = 'IP'
then net_allow_at else 0 end) as ip_d_30,
sum(case when (INCUR_DT) >= (&end_p-90)
and ip_op_cd = 'IP'
then net_allow_at else 0 end) as ip_d_90,
sum(case when (INCUR_DT) >= (&end_p-180)
and ip_op_cd = 'IP'
then net_allow_at else 0 end) as ip_d_180,
...
遗憾的是,在 Netezza 中没有过程性 SQL 扩展允许您使用像这样的变量作为 SQL 语言本身的一部分。纯粹的 SQL 解决方案会涉及一些问题,例如加入 CTE 返回那个值。但是,NZSQL CLI 确实允许使用会话变量,Aginity Workbench.
也是如此。一个使用 NZSQL 的例子。请注意内部单引号的转义以将变量用作文字。
TESTDB.ADMIN(ADMIN)=> \set TVAR '\'foo\''
TESTDB.ADMIN(ADMIN)=> select :TVAR;
?COLUMN?
----------
foo
(1 row)
TESTDB.ADMIN(ADMIN)=> create table test_table (col1 bigint);
CREATE TABLE
TESTDB.ADMIN(ADMIN)=> insert into test_table values (123);
INSERT 0 1
TESTDB.ADMIN(ADMIN)=> \set TCOL 'COL1'
TESTDB.ADMIN(ADMIN)=> select :TCOL from test_table;
COL1
------
123
(1 row)
Aginity 会在看到 $var_name 时自动提示输入值,但至少据我所知,没有硬编码该变量定义的功能。