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



我正在尝试创建一个粘结过程,给定特定的dbname和tablename,使用该表可用的所有列名创建一组选择语句。

我正在使用以下代码:

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语句。例如,数据库语句,设置SQL语句,多语句请求,创建从子句中创建用户/数据库语句,从句,选择 - 进入SQL或调用SQL。这是一个运行时错误。

看起来您有其他语法错误。声明您的光标,打开光标等。我认为您可以以更轻松的方式解决目标,您到底想完成什么?

最新更新