2015-08-31 2 views
2

В хранимой процедуре ниже я просто хочу создать псевдоним столбца на основе значения параметра. Это выглядит просто, но я не мог найти свой ответ.Netezza/SQL Column Alias ​​объединяет текст с значением параметра

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; 
+0

Это не похоже на код SQL Server. –

+0

Netezza SQL. Даже если я получу код сервера SQL для аналогичной цели, он может очень помочь. –

+0

В SQL Server вам нужно будет использовать Dynamic SQL для этого. Не знаю ничего о Netezza. –

ответ

0

Tab правильно, что это потребует динамический SQL в Netezza. Вот пример.

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) 
+0

Спасибо. Именно так я должен делать это в Netteza. Это сработало отлично :) –

+0

Я рад, что это сработало для вас. Пожалуйста, отметьте ответ как правильно, если это так. – ScottMcG

+1

Несомненно, извините, я новичок в Stackoverflow. Спасибо, что заметили это. –

0

В SQL Server, можно использовать динамический SQL, как это:

DECLARE @sql varchar(max) = 'Select x as SomeText' + @whichyear + ' from sometable'; 

EXEC(@sql); 
+0

Большое спасибо. Это приблизило меня к тому, что я искал. –

Смежные вопросы