2017-08-16 80 views
0

类似的问题已经在这里用动态动作进行了提及,描述和解决,但我仍然无法在我的情况下实现它。APEX - 如何根据页面上的项目值调用存储过程

我有一个窗体(创建创建,但创建页面)来更改远程数据库中的密码。有三个项目

  • 登录:P15_UNAME(选择列表)LOV
  • 新密码:P15_NEW(密码)
  • 按钮来执行:提交(按钮)。

按钮会发出简单的存储过程:

declare 
    success int; 
    msg varchar(100); 
begin 
    [email protected](
    PUSERNAME => :P15_UNAME, 
    PNEWPASSWORD => :P15_NEW, 
    PRESULT => success, 
    PMESSAGE => msg); 
if success = 0 then 
    apex_application.g_print_success_message := msg; 
else 
    apex_application.g_print_success_message := '<span style="color:red">' || msg || '</span>'; 
end if ; 
end ; 

不幸的是choosen /输入登录名和密码的值不通过存储过程调用。我可能应该使用动态动作,但不知道如何调用存储过程和动态同时。你能给我一些提示吗?

K.

+1

如果你的用户名在项目P15_COMBOVALUE中,那么你应该在过程调用中使用它,而不是P15_UNAME,如果没有这样的项目,它将返回null。不需要动态行动。 –

+0

你是对的 - 这当然是我的错。具有登录名P15_UNAME的项目。 – user3863616

+0

IS P15_UNAME显示用户名并返回一个ID? (提交时会话中的值是多少?) – RLOG

回答

0

您是否尝试将页面项值直接传递到数据库中?你的程序/程序调用应该看起来像这样。

-- database 
PROCEDURE p_change_details(p_uname varchar2, p_password varchar2) 
IS 
    success int; 
    msg varchar(100); 
begin 
    [email protected](
    PUSERNAME => p_uname, 
    PNEWPASSWORD => p_password, 
    PRESULT => success, 
    PMESSAGE => msg); 
if success = 0 then 
    apex_application.g_print_success_message := msg; 
else 
    apex_application.g_print_success_message := '<span style="color:red">' || msg || '</span>'; 
end if ; 
end ; 

--APEX 
p_change_details(:P15_UNAME, :P15_NEW) 
+0

那么它可能是一种正确的方式 - 将参数传递给本地过程而不是直接传入(远程)数据库。无论如何,结果是一样的。 – user3863616

0

您可以创建一个动态操作来在按钮单击时执行PL/SQL代码。

请参阅本例 - Link

希望这会帮助你。让我知道任何问题。