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

Teradata stored procedure with dynamic parameters

我正在尝试创建一个动态过程,给定特定的数据库名称和 table 名称,使用该 table 可用的所有列名称创建一组 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 存储过程中不支持语句。

我该如何解决这个问题?

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

您似乎还有其他语法错误。声明你的光标,打开你的光标等。我认为你可以用更简单的方式解决你的目标,你到底想完成什么?