2017-08-25 71 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