0

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

我假设这意味着我可以,如果 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;
4

0 回答 0