Netezza/SQL 列别名将文本与参数值连接起来
Posted
技术标签:
【中文标题】Netezza/SQL 列别名将文本与参数值连接起来【英文标题】:Netezza/SQL Column Alias concatenate text with parameter value 【发布时间】:2015-08-31 18:26:41 【问题描述】:在下面的存储过程中,我只是想根据一个参数值创建一个列别名。看起来很简单,但我找不到答案。
CREATE OR REPLACE PROCEDURE "SP"(INTEGER, INTEGER)
RETURNS INTEGER
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
whichyear ALIAS FOR $1;
BEGIN
Select x as "Some Text" + whichyear from some table...
;
END;
END_PROC;
【问题讨论】:
这看起来不像 SQL Server 代码。 Netezza SQL。即使我得到类似目的的 SQL Server 代码,它也会有很大帮助。 在 SQL Server 中,您必须使用动态 SQL 来执行此操作。对 Netezza 一无所知。 谢谢,您能否为此类示例提供动态 SQL 示例。 Netteza SQL 与 SQL Server 超级相似。在这种情况下,我也许可以解决它。 【参考方案1】:Tab 是正确的,这需要在 Netezza 中使用动态 SQL。这是一个例子。
CREATE OR REPLACE PROCEDURE "SP"(INTEGER)
RETURNS INTEGER
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
whichyear ALIAS FOR $1;
vSQL varchar(30000);
BEGIN
drop table the_results if exists;
vSQL := 'CREATE TABLE THE_RESULTS AS SELECT COL1 "SOME TEXT ' || whichyear || '" FROM TABLE_A;';
execute immediate vSQL;
END;
END_PROC;
这是输出。
TESTDB.ADMIN(ADMIN)=> exec SP(5);
SP
----
(1 row)
TESTDB.ADMIN(ADMIN)=> select * from the_results;
SOME TEXT 5
-------------
2
3
1
(3 rows)
【讨论】:
谢谢。这正是我在 Netteza 中应该做的事情。它工作得很好:) 我很高兴它对你有用。如果是这样,请将答案标记为正确。 当然,抱歉,我是 *** 的新成员。感谢您注意到这一点。 欢迎来到 ***!【参考方案2】:在 SQL Server 中,您可以像这样使用动态 sql:
DECLARE @sql varchar(max) = 'Select x as SomeText' + @whichyear + ' from sometable';
EXEC(@sql);
【讨论】:
非常感谢。这让我更接近于我正在寻找的东西。以上是关于Netezza/SQL 列别名将文本与参数值连接起来的主要内容,如果未能解决你的问题,请参考以下文章