2015-10-29 39 views
0

我已經創建了一個包含4個文本項的塊,我必須使用遊標來填充它。在Oracle表格中使用遊標填充數據

我已經在相同的塊查詢後觸發這是如下編寫代碼:

DECLARE 

    CURSOR D_COMM_DET IS 
     SELECT COMM_SRNO, COMM_SUB_SRNO, COMM_REASON 
     FROM CUST_COMM 
     WHERE LEAD_ID = :INQUIRY.INQ_ID; -- master block "INQUIRY" 
BEGIN 

    GO_BLOCK('DISPLAY_DET'); 
    CLEAR_BLOCK('NO_VALIDATE'); 
    FIRST_RECORD; 
    FOR CUR IN D_COMM_DET 
    LOOP 
    :DISPLAY_COMM_DET.A_COMM_SRNO := CUR.COMM_SRNO; 
    :DISPLAY_COMM_DET.A_COMM_SUB_SRNO := CUR.COMM_SUB_SRNO; 
    :DISPLAY_COMM_DET.A_COMM_REASON := CUR.COMM_REASON; 
    NEXT_RECORD; 
    END LOOP; 
    FIRST_RECORD; 

END; 

但這不是在文本項填充數據既不它顯示任何錯誤。 任何人都可以提供相同的幫助。

謝謝。

回答

0

我不確定我是否理解你的權利。如果您需要顯示來自其他表的原因名稱,則POST-QUERY觸發器正確,但在DISPLAY_COMM_DET塊中。

讓此塊作爲基於CUST_COMM表的詳細塊。創建非數據庫項目NDB_COMM_REASON_VALUE。這樣DISPLAY_COMM_DET塊上創建POST-QUERY觸發器:

declare 
    cursor c_reason is 
    select comm_value 
     from common_master 
     where comm_reason = :display_comm_det.comm_reason; 
begin 
    open c_reason; 
    fetch c_reason into :display_comm_det.ndb_comm_reason_value; 
    close c_reason; 
end; 
+0

非常感謝您的幫助。現在我面臨一個新問題。我有兩個部分,我將數據保存在表格中。一個是預定數據,另一個是實際數據。計劃的數據在實際數據之前存儲。現在,當我保存調度數據並嘗試使用光標填充數據時,我得到'找不到數據'錯誤。我沒有任何條件來顯示從光標獲取的數據。這個你能幫我嗎。 –

+0

No_DATA_FOUND的典型原因是SELECT INTO構造了未選中的行。您的選擇不好或者您沒有數據。 –

1

您不能在POST-QUERY觸發器中使用受限的內置過程,如GO_BLOCK,CLEAR_BLOCK,NEXT_RECORD。

在你的情況下,使DISPLAY_COMM_DET阻塞一個詳細塊到INQUIRY塊。

  1. 將LEAD_ID項目添加到DISPLAY_COMM_DET塊。它可以隱藏(visible =否)
  2. 集DISPLAY_COMM_DET基於CUST_COMM表
  3. 數據庫塊創建關係INQUIRY.INQ_ID = DISPLAY_COMM_DET.LEAD_ID查詢框上的關係。

刪除POST-QUERY觸發器,您不需要它。

-1

在POST-QUERY觸發器不能使用像GO_BLOCK,CLEAR_BLOCK,NEXT_RECORD限制內置程序。

寫入Execute_Query和When-Button-Pressed Trigger中提到的代碼。