繁体   English   中英

具有动态参数的Teradata存储过程

[英]Teradata stored procedure with dynamic parameters

我正在尝试创建一个动态过程,给定特定的dbname和表名,该过程使用该表可用的所有列名创建一组select语句。

我正在使用以下代码:

REPLACE PROCEDURE sum_col 
( 
IN TABLENAME VARCHAR(50), DBNAME VARCHAR(286)
)

BEGIN

DECLARE SqlTxt VARCHAR(3000);

FOR cur AS

      SELECT

         TRIM(a.DatabaseName) AS DBNAME,
         TRIM(a.TABLENAME) AS TABLENAME,
         TRIM(b.ColumnName) AS ColumnName

      FROM dbc.Tables a
      INNER JOIN dbc.COLUMNS AS b
      ON a.DatabaseName=b.DatabaseName AND a.TABLENAME = b.TABLENAME

      WHERE a.DatabaseName = :DBNAME
      AND a.TABLENAME = :TABLENAME
            AND TableKind = 'T'


DO 
SET SqlTxt =  'SELECT ' || '''' || TRIM(cur.ColumnName) || '''' ||  ', CASE
                           WHEN SUM(CNT) IS NULL THEN 0
                           ELSE SUM(CNT)
                           END AS CntNull

FROM (
SELECT  0 AS cnt    
FROM    ' || TRIM(cur.DBNAME) || '.'  || TRIM(cur.TABLENAME)  ||' )a ;';

CALL dbc.sysexecsql(:SqlTxt);

   END FOR;

END;

但是,当我调用该语句时,出现以下错误:调用失败。 [5568]存储过程不支持SUM_COL:SQL语句。

我怎样才能解决这个问题?

说明:在下列情况之一时,会发生此错误: 使用存储过程的动态SQL功能在存储过程中指定了不受支持的SQL语句。 例如,DATABASE语句,SET SQL语句,多语句请求,不带有FROM子句的CREATE USER / DATABASE语句,SELECT-INTO SQL或CALL SQL。 这是运行时错误。

看起来您还有其他语法错误。 声明游标,打开游标等。我认为您可以通过一种更轻松的方式解决目标,您到底想实现什么目标?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM