顯示具有 Oracle Developer 標籤的文章。 顯示所有文章
顯示具有 Oracle Developer 標籤的文章。 顯示所有文章

2014年1月14日 星期二

[FORM] FRM-40654: Record has been updated. Requery block to see change

不知道大家會不會常遇到FORM在修改資料時,就給你出現一句:
FRM-40654: Record has been updated. Requery block to see change









怎查都沒有lock時,一般都是欄位值前後有空白造成的,解決方法很簡單,
找出對應的table,把空白值update掉就好了。

2013年5月10日 星期五

Form Personalization 裡判斷DB原始值

有時候我們需要在Form Personalization 裡,取得某欄位原始值來做判斷時,可以利用:

${ITEM.BLOCK_NAME.ITEM_NAME.DATABASE_VALUE}

範例:
NVL(${ITEM.W_JOBS.START_QUANTITY.DATABASE_VALUE},0) != 0

2009年7月7日 星期二

關於Form中各種commit的說明

1. Commit針對Form操作和代碼進行Commit,若Form上的異動和代碼中的資料異動有衝突,以介面上的為主。

2. Commit_form
針對Form上的資料異動做Commit,對於代碼中的類似update、insert語句也進行提交,如果Form上的資料異動和代碼中的異動有衝突,以介面上的為主。

3. do_key(‘commit_form’)
首先會觸發Form下的KEY-COMMIT這個Trigger。若沒有KEY-COMMIT這個Trigger,則直接提交Form和代碼資料。如果Form上的資料異動和代碼中的資料異動有衝突,以介面上的為主。

4. forms_ddl(‘commit’)
只針對代碼中的update、insert、delete等語句進行Commit,Form上的異動不會提交。資料異動有衝突時,依據Trigger先後順序覆蓋,例如Post-Forms-Commit中的UPDATE就會覆蓋掉介面。

2008年9月23日 星期二

Oracle Forms Trigger 執行順序

出處:https://metalink.oracle.com/

Action                 Trigger Firing Order                    Level
------                 --------------------                    -----
Runform                 1.  Pre-Logon                          Form
                        2.  On-Logon                           Form
                        3.  Post-Logon                         Form
                        4.  Pre-Form                           Form
                        5.  When-Create-Record                 Block
                        6.  Pre-Block                          Block
                        7.  Pre-Record                         Block
                        8.  Pre-Text-Item                      Item
                        9.  When-New-Form-Instance             Form
                        10. When-New-Block-Instance            Block
                        11. When-New-Record-Instance           Block
                        12. When-New-Item-Instance             Item

***********
Enter Query             1.  Post-Text-Item                     Item
                        2.  Post-Record                        Block
                        3.  When-Clear-Block                   Block
                        4.  When-New-Record-Instance           Block
                        5.  When-New-Item-Instance             Item

Note: If you define the Key-ENTQRY trigger, this is the only trigger
      which fires in an Enter Query situation.

*****************
Execute Query
After Enter Query       1.  Pre-Query                          Block
                        2.  Pre-Select                         Block
                        3.  On-Select                          Block
                        4.  When-Clear-Block                   Block
                        5.  Post-Select                        Block
                        6.  On-Fetch                           Block
                        7.  On-Close                           Form
                        8.  When-Clear-Block                   Block

Note: If you define the Key-EXEQRY trigger, this is the only trigger
      which fires in an Execute Query situation.

*************
Execute Query
Without Enter
Query                   1.  Post-Text-Item                     Block
                        2.  Pre-Query                          Block
                        3.  Pre-Select                         Block
                        4.  On-Select                          Block
                        5.  Post-Select                        Block
                        6.  On-Fetch                           Block
                        7.  On-Close                           Form
                        8.  When_Create_Record                 Block
                        9.  Pre-Record                         Block
                        10. Pre-Text-Item                      Item
                        11. When-New-Record-Instance           Block
                        12. When-New-Item-Instance             Item

****
Exit                    1.  Post-Text-Item                     Item
                        2.  Post-Record                        Block
                        3.  Post-Block                         Block
                        4.  Post-Form                          Form
                        5.  On-Rollback                        Form
                        6.  Pre-Logout                         Form
                        7.  On-Logout                          Form
                        8.  Post-Logout                        Form

**************
Next Field and
Previous field          1.  When-New-Item-Instance             Item

***************
Next Record and
Previous Record         1.  When-New-Record-Instance           Block
                        2.  When-New-Item-Instance             Item

**************
Next Block and
Previous Block          1.  Post-Text-Item                     Item
                        2.  Post-Record                        Block
                        3.  Post-Block                         Block
                        4.  When-Create-Record                 Block
                        5.  Pre-Block                          Block
                        6.  Pre-Record                         Block
                        7.  Pre-Text-Item                      Block
                        8.  When-New-Block-Instance            Block
                        9.  When-New-Record-Instance           Block
                        10. When-New-Item-Instance             Form

*******************
Records Are Queried     1.  Post-Query                         Block
                        2.  Post-Change                        Block
                        3.  Post-Change                        Item
                        4.  Post-Change                        Block
                        5.  Post-Change                        Block
                        Go back to Post-Query

NOTE: This cycle is repeated for each record retrieved.

**********************
No Records Are Queried  1.  When-New-Record-Instance           Block
                        2.  When-New-Item-Instance             Item

NOTE: To observe this Trigger Firing Order:
        a.  Enter a query.
        b.  Enter a nonexistent record.
        c.  Execute the query.

      The two triggers listed above, the Enter Query triggers, and
      the Execute Query triggers fire.

*************
Create Record           1.  Post-Change                         Block
                        2.  When-Validate-Item                  Block
                        3.  Post-Text-Item                      Block
                        4.  When-Validate-Record                Block
                        5.  Post-Record                         Block
                        6.  Post-Block                          Block
                        7.  On-Savepoint                        Form
                        8.  Pre-Commit                          Form
                        9.  Pre-Insert                          Block
                        10. On-Insert                           Form
                        11. Post-Insert                         Block
                        12. Post-Forms-Commit                   Form
                        13. On-Commit                           Form
                        14. Post-Database-Commit                Form
                        15. Pre-Block                           Block
                        16. Pre-Record                          Block
                        17. Pre-Text-Item                       Block
                        18. When-New-Item-Instance              Form

*************
Update Record           1.  When-Database-Record                Block
                        2.  Post-Change                         Block
                        3.  When-Validate-Item                  Block
                        4.  Post-Text-Item                      Block
                        5.  When-Validate-Record                Block
                        6.  Post-Record                         Block
                        7.  Post-Block                          Block
                        8.  On-Savepoint                        Form
                        9.  Pre-Commit                          Form
                        10. Pre-Update                          Block
                        11. On-Update                           Block
                        12. Post-Update                         Block
                        13. Post-Forms-Commit                   Form
                        14. On-Commit                           Form

                        Here the transaction is complete and one record added.

                        15. Post-Database-Commit                Form
                        16. Pre-Text-Item                       Block
                        17. When-New-Item-Instance              Form

NOTE: To observe this Trigger Firing Order:

        a.  Execute a query.
        b.  Change a value.
        c.  Choose Action->Save from the menu.
        d.  Record the triggers from that point.

*************
Delete Record           1.  On-Lock                             Block
                        2.  When-Remove-Record                  Block
                        3.  Post-Change                         Block
                        4.  Post-Change                         Block
                        5.  Post-Change                         Block
                        6.  Post-Change                         Block
                        7.  Post-Change                         Block
                        8.  Post-Change                         Block
                        9.  Post-Change                         Item
                        10. Post-Query                          Block
                        11. Post-Text-Item                      Block
                        12. Post-Record                         Block
                        13. Pre-Record                          Block
                        14. Pre-Text-Item                       Block
                        15. When-New-Record-Instance            Block
                        16. When-New-Item-Instance              Form

2008年3月26日 星期三

安裝 Oracle Database 10g Express

Oracle Database 10g Express的安裝其實是相當簡便的,幾乎只要一直下一步就可以完成安裝了

image

接受合約,下一步

image

因為只有一個產品可以選擇安裝,安裝路徑可以改變,下一步

image

設定SYS與SYSTEM USER的密碼,下一步

image

顯示Database一些listener的相關資訊,下一步安裝

image

完成安裝後,可以到資料庫管理首頁做相關設定

image

以SYS身份登入

image

XE的 Web管理頁面還蠻方便,大部分的工作不用再透過其他工具來執行,算是一套不錯的免費資料庫。

對於個人或小企業來說,4GB的資料庫應該很好用了。

image

2008年3月23日 星期日

好用的免費資料庫: Oracle 資料庫 10g 快捷版

我們在開發軟體時,一般都會選擇MySQL當後端資料庫,不過個人覺得若是想享用頂級的免費資料庫,可以有另一個更好的解決方案。Oracle Database 10g Express

Oracle Database 10g Express(Oracle Database XE)是基於 Oracle Database 10g 第 2 版代碼庫的小型入門級資料庫,它具備以下優點:免費進行開發、部署和分發;下載速度快;並且管理簡單。Oracle XE 是一款優秀的入門級資料庫,可供以下使用者使用:

  • 致力於 PHP、Java、.NET、XML 和開放原始程式碼應用程式的開發人員
  • 需要免費的入門級資料庫進行培訓和部署的 DBA
  • 需要入門級資料庫進行免費分發的獨立軟體廠商 (ISV) 和硬體供應商
  • 需要在課程中使用免費資料庫的教育機構和學生

現在,利用 Oracle Database XE,您可以使用強大的基礎架構來開發和部署應用程式,然後在必要時進行升級而不必進行昂貴和複雜的移植。閱讀使用者對 Oracle 資料庫 XE 的評價。

Oracle 資料庫 XE 對安裝到的主機的規模和 CPU 數量不作限制(每台電腦一個資料庫),但 XE 將最多存儲 4GB 的使用者資料,最多使用 1GB 記憶體,並在主機上使用一個 CPU。

clip_image001 下載 Oracle Database 10g XE

2007年11月14日 星期三

中文大寫金額轉換函式

這個FUNCTION 是為了朋友寫的,其中大部分是參考某網友寫的程式(不好意思,忘了網址),有需要的朋友可以參考看看。

CREATE OR REPLACE FUNCTION get_ntd_amt(smallmoney VARCHAR2)
RETURN VARCHAR2 IS
   BigWrite       VARCHAR2(100); --用於返回大寫的金額
   Bignum         VARCHAR2(10); --用於存放每一個阿拉伯數字對應的漢字
   NTD            VARCHAR2(10); --用於存放台幣單位
   moneyplace     NUMBER; --用於確定台幣的精度,最多只能精確到分
   dotplace       NUMBER; --確定小數點的位置
   moneynum       NUMBER; --台幣的位數
   err_exception  EXCEPTION;
BEGIN
   /*用內置函數INSTR確定小數點的位置*/
   dotplace:= INSTR(smallmoney,'.');
   /*判斷是否超出本函數定義的精度範圍,
   如果是則引發自定義異常err_exception*/
   IF (LENGTH(smallmoney)>14)
      OR((LENGTH(smallmoney)>12)AND(dotplace=0)) THEN
      RAISE err_exception;
   END IF;
   /*確定台幣的精度,如果小數點位置為0則精度只精確到元否則按小數點的 位置來確定台幣的精度*/
   IF dotplace=0 THEN
      moneyplace:=0;
   ELSE
      moneyplace:=dotplace-LENGTH(smallmoney);
   END IF;
   /*確定台幣的精確,如果小數點位置為0則精度只精確到元否則按小數點的 位置來確定台幣的精度*/

   /*通過一個FOR循環將smallmoney中的阿拉伯數字逐一去出來,注意該FOR循 環是按照降序循環的*/
   BigWrite :='';
   FOR moneynum in REVERSE 1..LENGTH(smallmoney) LOOP
       /*如果位置在小數點的位置則不做任何動作*/
       IF moneynum<>dotplace THEN
          /*CASE循環將smallmoney裡對應的阿拉伯數字用中文來表示*/
          Bignum := CASE SUBSTR(smallmoney,moneynum,1)
                    WHEN '1' THEN '壹'
                    WHEN '2' THEN '貳'
                    WHEN '3' THEN '參'
                    WHEN '4' THEN '肆'
                    WHEN '5' THEN '伍'
                    WHEN '6' THEN '陸'
                    WHEN '7' THEN '柒'
                    WHEN '8' THEN '捌'
                    WHEN '9' THEN '玖'
                    WHEN '0' THEN '零'
                    END;     
          /*CASE循環來設置smallmoney裡對應的阿拉伯數字的相應的精度*/
          NTD := CASE moneyplace
                 WHEN -2 THEN '分'
                 WHEN -1 THEN '角'
                 WHEN 0  THEN '元'
                 WHEN 1  THEN '拾'
                 WHEN 2  THEN '佰'
                 WHEN 3  THEN '仟'
                 WHEN 4  THEN '萬'
                 WHEN 5  THEN '拾'
                 WHEN 6  THEN '佰'
                 WHEN 7  THEN '仟'
                 WHEN 8  THEN '億'
                 WHEN 9  THEN '拾'
                 WHEN 10 THEN '佰'
                 WHEN 11 THEN '仟'
                 END;
          moneyplace := moneyplace+1;
          --IF BigWrite IS NULL THEN
          --BigWrite := Bignum||NTD;
          --ELSE
          BigWrite := Bignum||NTD||BigWrite;
          --END IF;
       END IF;
   END LOOP;
   RETURN BigWrite;
EXCEPTION --異常處理部分
   WHEN err_exception THEN
        return ('該函數只能轉換長度不大於14位後整數位不大於12位的金額!');
   WHEN OTHERS THEN
        return ('不是有效的金額!');
END;

2007年10月23日 星期二

FND_MESSAGE 常用的幾種用法

1. FND_MESSAGE.RETRIEVE
取得一條資料庫中的等待資訊。

2. FND_MESSAGE.SET_STRING (value IN varchar2)
將字串放到消息棧中

3. FND_MESSAGE.SET_TOKEN
用值替換MESSAGE的訊息中的變數
語法:
procedure FND_MESSAGE.SET_TOKEN(token_name IN VARCHAR2,
value IN VARCHAR2,
translate IN boolean default FALSE);

4. FND_MESSAGE.SET_NAME
語法:
procedure FND_MESSAGE.SET_NAME(application_shortname IN varchar2,
message_name IN varchar2);
(從Message Dictionary獲取ERP已定義的訊息:
FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
FND_MESSAGE.ERROR ;)

-- 在FORM用於Show Message的函數

5. FND_MESSAGE.DEBUG

6. FND_MESSAGE.GET
取得在message中設置好的message訊息。

7. FND_MESSAGE.SHOW
以最基本的方式顯示給用戶,和FND_MESSAGE.DEBUG一樣效果。

8. FND_MESSAGE.HINT
不會彈出對話方塊給用戶,而是顯示在左下腳的狀態欄上面。

9. FND_MESSAGE.ERROR
以Error資訊的方式顯示給用戶

10.FND_MESSAGE.WARN (Function)
以選擇資訊的方式顯示給用戶,可以選擇[Ok]或[Cancel],返回值分別是TRUE和FALSE
範例:
if FND_MESSAGE.warn then
fnd_message.debug('True');
else
fnd_message.debug('False');
end if;

11.FND_MESSAGE.QUESTION (Function)
返回一個被選中的button的number
function QUESTION(BUTTON1 in varchar2 default 'YES',
BUTTON2 in varchar2 default 'NO',
BUTTON3 in varchar2 default 'CANCEL',
DEFAULT_BTN in number default 1,
CANCEL_BTN in number default 3,
ICON in varchar2 default 'question')
return number

範例:
FND_MESSAGE.SET_NAME('FND','ATCHMT-COMMIT BEFORE INVOKING');
IF FND_MESSAGE.QUESTION('YES','CANCEL',NULL,1,2,NULL) = 2 THEN
RAISE FORM_TRIGGER_FAILURE;
END IF;

2007年10月19日 星期五

[Developer] 客製Oracle Form的開發環境設定

為確保開發客製程式的環境一致性,安裝Developer後建議:

 

1. 安裝 Oracle Developer 6i後更新patch 13以上版本。

 

2. Apps. Server$AU_TOP/resource 下載所有檔案至本地端,如C:\resources\

 

3. 登入編輯程式(regedit)設定 Oracle Home的環境變數如下:

   NLS_DATE_FORMAT = DD-MON-RR

   FORMS60_PATH = C:\resources

   REPORTS60_PATH = C:\resources

   Oracle_Applications = TRUE