2012-08-27 15 views
5

我對oracle apex_application.gfnn的工作方式以及它是否僅適用於Oracle ApEx中的標準SQL報表或僅適用於SQL(可更新報表,即表格形式)而感到困惑。瞭解Oracle Apex_Application.G_Fnn以及如何使用它

基本上我想達到以下使用此示例SQL,這僅僅是一個標準的SQL報告,但不能確定,如果我試圖做到的,是可能與這種類型或報告,即:

select id, 
     name, 
     telephone, 
     apex_item.checkbox2(10,id) as "Tick when Contacted", 
     apex_item.text(20,my_date) as "Date Contacted", 
     apex_item.textarea(30,my_comment,5,80) as "Comment" 
from my_table 

基於上面的sql,假設這個sql查詢返回10行。現在使用複選框作爲我的駕駛ID,我勾選所有奇數記錄/行的複選框,即1,3,5,7,9行,對於這些行中的每一行,我還輸入日期值(f20)和註釋(f30)

記住這一點,然後我想要創建一個頁面進程,當用戶按下「保存」按鈕,這個按鈕將遍歷這些選中的行並存儲每條記錄,我的日期和我的評論但僅限於我選擇的行。

因此,基於上述情況,我希望有我的表5個的消息行有以下的列:

ID  MY_DATE  MY_COMMENT 
1  26/08/2012 Comment A 
3  27/08/2012 Comment B 
5  28/08/2012 Comment C 
7  29/08/2012 Comment D 
9  30/08/2012 Comment E 

不幸的是,我不知道該如何使用apex_application.G_F10.COUNT

實現這一目標

我希望能夠訪問這些數組元素(f20)和f(f30)中每一行的內容,我已勾選了該複選框。

這是可能的或者我誤解了apex_application.G_Fnn的工作方式?

如果上述不可能,請讓我知道我該如何做到這一點?

我需要表格報告嗎?

任何幫助將不勝感激。

謝謝。

+0

Tonsils,你的新問題http://stackoverflow.com/q/12163564/814048讓我意識到我在我的代碼中犯了一個非常愚蠢的錯誤。我修改了我的答案。對於那個很抱歉。 – Tom

+0

嗨湯姆 - 沒問題。感謝您修正了您的答案,現在也更加清晰。當我需要再次使用checbox場景時,我會保持這種想法。順便說一句,這個修改後的答案與表格式SQL可更新SQL報告或只是標準報告有關嗎? – tonyf

+0

取決於您的標準報告意味着什麼!對於表格形式:肯定是的,因爲這是我們在這裏工作的那種。 – Tom

回答

8

你非常接近。

select apex_item.checkbox2(10, empno) select_me, 
apex_item.text(20, empno) empno, 
apex_item.text(30, ename)||apex_item.hidden(50, empno) ename 
from emp 

我將連接隱藏的項目,因爲我不希望它在自己的專欄。與佈局進行混合。
此外,隱藏的項目在那裏,因爲複選框的工作方式。複選框僅提交檢查項目的值。這意味着數組10有3個值。其他數組仍然包含所有行的值。
這就是爲什麼我再次添加隱藏的empno:所以我們可以將選中的值與其他行進行匹配。

在提交過程:

DECLARE 
    v_empno emp.empno%TYPE; 
    v_ename emp.ename%TYPE; 
BEGIN 
    --f10: checkbox 
    --f20: empno 
    --f30: ename 
    --f50: empno again 
    for i in 1..apex_application.g_f10.count 
    loop 
     for j in 1..apex_application.g_f50.count loop 
     if apex_application.g_f10(i) = apex_application.g_f50(j) 
     then   
      -- access values for the selected rows in the other arrays 
      v_empno := apex_application.g_f20(j); 
      v_ename := apex_application.g_f30(j); 

      apex_debug_message.log_message('Employee: '||v_empno||' - '||v_ename); 
     end if; 
     end loop; 
    end loop; 
END; 

運行頁面,啓用調試,選擇記錄2,4和6,提交。

record selection and query output

調試輸出:

debug output: BLAKE, JONES, FORD

你現在需要做的就是把你的處理在循環。

+0

再次感謝Tom,但只是想確認一些東西,可能會在作品中拋出一把扳手,但對於f20和f30,假設f20是用戶實際鍵入的日期字段,而不是數據庫表格列中的f30 ,這是一個textarea字段,用戶可以在其中輸入註釋,而不是從數據庫表格列中輸入註釋。您的處理過程是否仍適用於此場景或需要進行更改? – tonyf

+0

這取決於你的實際意思:如果你打算使用標準的多行處理,你將使用標準的表格形式:你不能。另外,對於手動表格形式,您不能使用表格形式驗證(在驗證處理點中聲明的驗證)。您也不會得到校驗和和最佳鎖定,這在具有併發用戶的系統中很重要。 – Tom

+0

哦,嘿,你可以使用apex_item.date_popup2作爲日期字段! – Tom

相關問題