日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
OracleForms中多用途代碼有哪些?

在前幾年,當(dāng)Oracle數(shù)據(jù)庫放棄相關(guān)客戶端OracleForms的時(shí)候,隨之也跟著消失的那些相關(guān)內(nèi)置的某些函數(shù)中會(huì)有一項(xiàng)是關(guān)于函數(shù)(alert message function)傳遞參數(shù)的。如果你處理錯(cuò)誤或者缺失的輸入?yún)?shù)。

Forms遷移過程的一部分是將這個(gè)內(nèi)置的函數(shù)從6i版本改成9i版本。

復(fù)雜的應(yīng)用可能包含有上千條警告消息,并且一個(gè)主要的應(yīng)用(即Forms)的變化會(huì)導(dǎo)致上千條改變。做這樣的改變的確是一件討人嫌的行為。

另一方面,作為一個(gè)使用PL/SQL的DBA和程序員,你到底寫過多少次DBMS_OUTPUT.PUT_LINE('')?必須寫的或者敲入的DBMS_OUTPUT.PUT_LINE變得非常無聊,使用方便的、內(nèi)置的短小的代碼不是更好嗎?

可能并不是經(jīng)過深思熟慮,但是更多的歸咎于好運(yùn)或者意識(shí)到同樣的東西必須敲一遍又一遍的現(xiàn)實(shí),機(jī)靈的OracleForms程序員們創(chuàng)建了自己的內(nèi)置函數(shù),采用了過程的方式來產(chǎn)生警告消息。相同的原理可以被用在你日常的PL/SQL代碼中。事實(shí)上,你可以創(chuàng)建一個(gè)小的消息庫管理很多類型的輸出消息。讓我們看看一些這樣的可能性。

一個(gè)簡(jiǎn)單的警告消息過程

就像在這一章節(jié)標(biāo)題中表示的那樣,第一個(gè)方法是非常簡(jiǎn)單的。假設(shè)你有一個(gè)常見的需求要輸出某個(gè)過程、函數(shù)或者代碼塊更新的記錄個(gè)數(shù)。讓我們假定被更新行的個(gè)數(shù)是46。使用下面的過程之后,一個(gè)簡(jiǎn)單的“am(46);”語句就可以你需要的輸出:

 
 
 
  1. CREATE OR REPLACE procedure am (msg number) as   
  2. begin   
  3. dbms_output.put_line('Records updated: '||msg);   
  4. end;   
  5. /  

另一個(gè)版本可以處理字符串類型,因此對(duì) “ams('your message here');”的調(diào)用顯著的降低了你敲入的次數(shù)。當(dāng)調(diào)試或者解決問題的代碼中,有這樣一個(gè)簡(jiǎn)單的內(nèi)置函數(shù)對(duì)輸出“where am I in the code”的語句是非常寶貴的。

位置報(bào)告可以確認(rèn),比如,你進(jìn)入了IF-THEN-ELSE語句中哪個(gè)分支。假如你的問題代碼調(diào)用了很多次其他的對(duì)象(過程、函數(shù)等等),輸出像“calling function X”或者“returned from function X”這樣的狀態(tài)信息可以確認(rèn)過程流。最終,另外一種使用情況是報(bào)告數(shù)值。你可以報(bào)告或者跟蹤一個(gè)變量的值是如何被改變的。

建立一個(gè)警告消息庫

當(dāng)然,你的消息庫的復(fù)雜性和靈活性完全取決于你。假如你的(輸出)消息是簡(jiǎn)單的,那么保持函數(shù)過程簡(jiǎn)單。更準(zhǔn)確的講,保持函數(shù)過程的個(gè)數(shù)是最少的。只要兩個(gè)簡(jiǎn)單的過程,ams和amn,就可以用來輸出基于字符串和數(shù)值的消息了。

假如你需要讓輸出的文字內(nèi)容根據(jù)運(yùn)算的輸出有所變化,比如DML語句的輸出,那么你可能需要三個(gè)新的內(nèi)置過程(插入、更新和刪除運(yùn)算各一個(gè))。可能你想說明刪除的類型或者原因。比如一個(gè)批處理作業(yè)的某一步是計(jì)算重復(fù)記錄的個(gè)數(shù)。

那么像“Records counted: 46” 這樣的輸出是足夠有用的,但是在這種情況下,“Duplicates counted: 46”會(huì)顯得更有效。因此,我們?cè)黾恿?個(gè)新的內(nèi)置過程。

這樣,我們現(xiàn)在有了至少6個(gè)不同的過程。現(xiàn)在,管理性的問題應(yīng)該比較明顯了。我們尋找一些簡(jiǎn)單的,但是同時(shí)又是健壯的過程。至少有兩種方式可以用于重新簡(jiǎn)化需要的功能。一種方法是讓警告消息過程能夠接收兩個(gè)輸入?yún)?shù)。另外一種方法,正是我準(zhǔn)備介紹的,是把這些過程打包。

增加輸入?yún)?shù)的個(gè)數(shù)

再說一遍,假如前面的簡(jiǎn)單方法可以滿足了你的要求,那么就沒必要繼續(xù)深入了。創(chuàng)建有兩個(gè)輸入?yún)?shù)的過程,第一個(gè)參數(shù)是消息文字或者說基礎(chǔ),第二個(gè)參數(shù)可以是輸出、位置、狀態(tài)或者數(shù)值。如果你關(guān)注數(shù)據(jù)類型的轉(zhuǎn)化,那么這兩個(gè)輸入?yún)?shù)的組合text/text和text/number都可以統(tǒng)一成text/text類型。

你的確必須做這樣的轉(zhuǎn)換嗎?不,但是為了和你已有的保持一致,如果你在別的地方做了類型映射,那么這里也進(jìn)行類型映射。不管這些,下面的例子顯示了第一種方法的靈活性。

 
 
 
  1. CREATE OR REPLACE procedure am (msg1 varchar2, msg2 varchar2) as   
  2. begin   
  3. dbms_output.put_line(msg1||msg2);   
  4. end;   
  5. /  

編譯之后,下面是使用的例子。

 
 
 
  1. SQL> set serveroutput on   
  2. SQL> exec am('Here I am',46);   
  3. Here I am46   
  4. PL/SQL procedure successfully completed.  

好了,這次輸出本可以看起來更好一些(注意輸出中msg1和msg2中沒有空格)。我們到這里就必須格式化一個(gè)或者全部?jī)蓚€(gè)消息輸入讓輸出好看一些。然而,假如美觀不需要關(guān)心,那么創(chuàng)建基于像 ('dupes ',46)這樣的輸入的消息,這樣做也是非常簡(jiǎn)單的,雖然你需要處理空格或者格式化。

那么這種方法是否有缺陷呢?這就看情況了。假如你需要的僅僅是msg1,而不需要msg2,怎么辦?當(dāng)創(chuàng)建這個(gè)過程,需要允許msg2是null值。顯然,msg1不需要這樣,對(duì)吧

 
 
 
  1. CREATE OR REPLACE procedure am   
  2. (msg1 varchar2, msg2 varchar2 default null) as   
  3. begin   
  4. dbms_output.put_line(msg1||msg2);   
  5. end;   
  6. /   
  7. Procedure created.   
  8. SQL> exec am('Where am I?');   
  9. Where am I?   
  10. PL/SQL procedure successfully completed.  

上述的相關(guān)內(nèi)容就是對(duì)Oracle Forms中多用途代碼分析,希望會(huì)給你帶來一些幫助在此方面。


本文名稱:OracleForms中多用途代碼有哪些?
路徑分享:http://www.dlmjj.cn/article/cddpjhh.html