2017-08-16 72 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

希望這會幫助你。讓我知道任何問題。