在SQL存储过程中基于逗号分隔的字符串动态创建表

时间:2014-02-10 04:42:16

标签: sql stored-procedures netezza

我正在编写一个SQL存储过程,它接受一个填充名称作为参数,根据填充名称创建一个表,然后填充该表。只要我知道我提前传递了多少人口名称,它就能很好地工作,但是当我不知道有多少人口提前工作时我需要这个。

我将传递逗号分隔的字符串,我需要以下过程来为该字符串中的每个值运行。存储过程是一系列Union Union语句,但我只包括下面的第一个。

DECLARE
    ID ALIAS FOR $1;
    POPULATION FOR $2;
    SQL VARCHAR(32000);
BEGIN
SQL:='CREATE TABLE DEMO_POPULATION_' ||POPULATION|| '_TABLE AS          
SELECT ' ||ID|| ' AS ID
  , '||POPULATION||' AS POPULATION
  , 'AGE' AS CATEGORY
  , MAX((SELECT AGE_MAX FROM ID_INSTANCE A JOIN DEMO_SOURCE B ON (A.ID = B.NAME) WHERE ID = ' ||ID|| ' AND POPULATION LIKE '||POPULATION||' )) AS VAL 
UNION ALL
...

此外,我正在研究IBM Netezza,我知道很多人都没有使用它。因此,对一般SQL的响应会很好,它不能是SQL Server特有的。

1 个答案:

答案 0 :(得分:0)

请查看以下工作示例 -

BEGIN
       v_sql:='Create table empx (id int)';
       execute immediate v_sql; 
END;