2016-08-18 7 views
1

私はプロシージャが正常に実行されたかどうかを検証できるように、0(または)1のようなプロシージャ内で最後に呼び出されたプロシージャのステータスを取得する必要があります。テラデータ内でプロシージャ内の呼び出されたプロシージャのステータスを返す方法は?

1つのプロシージャを呼び出すと、複数のプロシージャが呼び出されます。呼び出されたプロシージャのステータスを検証する方法は?プロシージャが正常に実行され

call procedure_1(); 
GET DIAGNOSTICS V_RETVAL = RETURN_STATUS; 

場合、私はどのように達成することができ、それは0を返す、またはそれがTeradata 1.

のように返します。次のように

AS400 DB2では、私が使用しましたか?あなたが失敗した場合の手順は、それが失敗し返す必要があります正常に完了したときに成功を返す必要が出てパラメータを持っている必要があり、内側の手順で

+1

以下のように、それが正常に動作していませんでしたされている場合。 'GET DIAGNOSTICS'はエラーハンドラで使用できます。または、変数をSPに渡すと、それに応じて変数が設定されます。 – dnoeth

答えて

0
create table table_err 
(
errno number, 
date_added date default Current_Timestamp(0) 
); 

replace procedure proc_test3() 
begin 
    declare l_user number; 
    select 2/0 into l_user; 
end; 

replace procedure proc_test4() 
begin 
    DECLARE divide_by_zero CONDITION FOR SQLSTATE '22012'; 
    DECLARE EXIT HANDLER FOR divide_by_zero 
    BEGIN 
    insert into table_err (errno) select 1; 
    -- print 'ERROR: division by zero' 
    END; 
    call proc_test3(); 
end; 

call proc_test4(); 
select * from table_err; 
0

が存在ハンドラを使用することによって、あなたは終了ステータスを定義することができます - あなたは、内側の手順で以下のブロックを使用する必要があります

は: -

DECLARE EXIT HANDLER FOR SQLEXCEPTION 

BEGIN 
    SET lv_sql_state = SQLSTATE; 
    SET ln_sql_code = SQLCODE; 
    SET lv_out_status ='FAILED'; 
    ROLLBACK; 
END; -- this is a good practice to always use this block in every procedure 

だから、任意の時点で、あなたの手順では、それが発生します失敗FAILED。今

プロシージャコールが失敗した場合の手順は、

REPLACE PROCEDURE database_name.proc_name1 (OUT lv_out_status VARCHAR(10)) 
BEGIN 

    DECLARE lv_status     VARCHAR(10000) DEFAULT ''; 

    DECLARE EXIT HANDLER FOR SQLEXCEPTION 
    BEGIN 
     SET lv_sql_state = SQLSTATE; 
     SET ln_sql_code = SQLCODE; 
     SET lv_out_status ='FAILED'; 
     ROLLBACK; 
    END; 


    CALL database.proc_name1(lv_status); -- variable status will capture the status of the procedure 

IF lv_status = 'FAILED' 

THEN 

    SET lv_message = 'Failure in calling of procedure proc_name1 '; 
ELSE 
write other queries; 

END IF; 

END; 
関連する問題