微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态 SQL 调用 Teradata 中的另一个存储过程

如何解决动态 SQL 调用 Teradata 中的另一个存储过程

我在帮助指南中看到,您不能在没有输出参数的 teradata 动态 sql 语句中使用 call 语句。

我认为这意味着我可以,如果 proc 有一个输出参数。

有人做过吗?

场景 -

我有一个表格,在某些时候我会根据逻辑字段进行扩展,以便在什么时候运行,并且该表格在其他地方进行管理 -

    CREATE TABLE DB.SP_Test 
(

    ProcName    VARCHAR(250),ProcRun     VARCHAR(1)
);

现在我添加了 chrTest 作为输出,但是我在运行时仍然出错(没有编译错误

错误:- sql_State sql_Exception T7689 无效的动态 sql 语句。

REPLACE PROCEDURE DB.Test_Control (OUT chrTest VARCHAR(250) )

sql Security INVOKER 

LMain: 
BEGIN
DECLARE sqlProcRun     VARCHAR(20000);

DECLARE CONTINUE HANDLER
    FOR sqlException
    BEGIN
-----------------------------------------------------------------------------
    DECLARE strExceptionText VARCHAR(250);
   
    GET DIAGNOSTICS EXCEPTION 1 strExceptionText = Message_Text;  
    
    INSERT INTO DB.PROC_ERROR VALUES 
    (
        'Test_Control',:sqlState,strExceptionText,Current_Timestamp
    )
    ;
    END;    
-----------------------------------------------------------------------------
SET sqlProcRun ='';
    
    L0: 
    FOR procs_run_cursor AS select_list

    CURSOR FOR    
        SELECT Trim(ProcName) AS ProcName
        FROM   DB.SP_Test 

    DO  
       /*creating a lost of call statements to run*/
       SET sqlProcRun = sqlProcRun ||'CALL DB.'||procs_run_cursor.ProcName|| '();';
    END FOR L0;
    
    EXECUTE IMMEDIATE sqlProcRun;

END;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。