2017-08-25 90 views
1

我在Windows機器上使用Oracle Forms 6i時,在窗體中,當我單擊某個按鈕時,啓動觸發器WHEN-BUTTON-PRESSED,調用一個包的函數在數據庫中,下面是觸發和功能兩者的PL/SQL代碼:從Oracle窗體調用函數

功能:

Function test_function (code Varchar2) RETURN Varchar2 IS 
BEGIN 
    if code IN ('Y') then 
     return('Yes'); 
    else 
     return('no'); 
    endif; 
END; 

觸發:

DECLARE 
    message_test varchar2(20); 
BEGIN 
    message_test := pkg_test.test_function('Y'); 
    message('the message is: ' || message_test);pause; 
END; 

我在這裏的問題是,它不是的怎麼什麼,但是當我在寫SQL * pkg_test.test_function('Y')加或SqlDevelopper它顯示'Yes'結果,

或當我改變message_test := pkg_test.test_function('Y');select pkg_test.test_function('Y') into message_test from test;它的工作原理也。

可能是什麼原因呢? PS:這只是一個測試代碼,實際的代碼比這個更復雜。

+0

輸出是否爲空白?或者它顯示「該消息是:」並且沒有消息?因爲如果它是第一個,那麼你的message()函數沒有做任何事情,但如果它是第二個,那麼調用pkg_test.test_function()會出問題。 – kfinity

+0

@ kfinity它是空白的,沒有「信息是:」,這個問題與調用pkg_test.test_function()。 – zenami

+0

嗯,也許你得到一個錯誤?您可以將觸發器的末尾更改爲:「EXCEPTION when others then message(dbms_utility.format_error_backtrace); END;'看看它是什麼。 – kfinity

回答

0

如果只是測試,你可以嘗試顯示alert()函數嗎?

DECLARE 
    message_test varchar2(20); 
    alert_resp number; 
BEGIN 
    message_test := pkg_test.test_function('Y'); 
    set_alert_property('ALERT_OK','the message is: ' || message_test); 
    alert_resp := show_alert('ALERT_OK'); 
END; 

確保您在窗體警報中創建警報ALERT_OK。

+0

'Show_alert'只有一個參數,它是警報的名稱/ ID,所以這一行不起作用。「alert_resp:= show_alert('ALERT_OK','message is:'|| message_test);」 – zenami