【发布时间】:2017-09-18 08:04:46
【问题描述】:
我正在尝试创建一个 dunamic 过程,给定特定的 dbname 和 tablename,使用该表可用的所有列名创建一组 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 stored-procedures teradata query-parameters