2007年10月30日 星期二

晚點再把文章整理上來

這兩週在忙期中報告跟考試,年紀大唸書真累,晚點再把文章整理上來。

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日 星期五

Eee PC Sales kit 產品簡介

朋友發過來的Eee PC Sales kit 產品簡介,趁熱趕快放上來,雖然還缺貨中,看看也不錯。





































SQL常用語法

SELECT
--------
SELECT 欄位 FROM 表格名稱


DISTINCT
--------
SELECT DISTINCT 欄位
FROM 表格名稱


WHERE
--------
SELECT 欄位
FROM 表格名稱
WHERE condition


AND / OR
--------
SELECT 欄位
FROM 表格名稱
WHERE 條件
{[ANDOR] 條件}


IN
--------
SELECT 欄位
FROM 表格名稱
WHERE 欄位 IN ('值1', '值2', ...)


BETWEEN
--------
SELECT 欄位
FROM 表格名稱
WHERE 欄位 BETWEEN '值1' AND '值2'


LIKE
--------
SELECT 欄位
FROM 表格名稱
WHERE 欄位 LIKE {模式}


ORDER BY
--------
SELECT 欄位
FROM 表格名稱
WHERE 條件
ORDER BY 欄位 [ASC, DESC]


COUNT
--------
SELECT COUNT(欄位)
FROM 表格名稱


GROUP BY
--------
SELECT 欄位1, SUM(欄位2)
FROM 表格名稱
GROUP BY 欄位1


HAVING
--------
SELECT 欄位1, SUM(欄位2)
FROM 表格名稱
GROUP BY 欄位1
HAVING (函數條件)


CREATE TABLE
--------
CREATE TABLE 表格名稱
(欄位1 資料型別, 欄位2 資料型別,...)


DROP TABLE
--------
DROP TABLE 表格名稱


TRUNCATE TABLE
--------
TRUNCATE TABLE 表格名稱


INSERT INTO
--------
INSERT INTO 表格名稱 (欄位1, 欄位2, ...)
VALUES (值1, 值2, ...)


UPDATE
--------
UPDATE 表格名稱
SET 欄位1 = [新值]
WHERE 條件


DELETE
--------
DELETE 表格名稱
WHERE [條件]

[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

[ERP] 當IE無法開啟 Oracle ERP 時,請使用Firefox

自從把Windows XP的IE瀏覽器升級7.0版後,進入Oracle ERP開啟Form程式時就常常會當掉,所以現在都改用Firefox來當進入Oracle ERP的瀏覽器,不過有同事常常遇到Firefox裝完後,進入ERP點選Form程式時沒有反應。

這個問題是因為在安裝Firefox前,已經先安裝Oracle JInitiator,所以元件NPJinit13xxx.dll沒被複製到Firefox的plugins裡。

最快解決方式就是將 \Program Files\Oracle\JInitiator 1.3.x.x\bin\NPJinit13xxx.dll 這個檔案複製到 \Program Files\Mozilla Firefox\plugins 再重新執行Firefox應該就可以進入了。

2007年10月18日 星期四

[INV] 採購件無法收料 錯誤 APP-PO-14142: DISTRIBUTION_DETAIL-10:ORA-01403: no data found



當外購件收料(Receipts)後要入庫(Receiving Transactions)時,遇到錯誤:APP-PO-14142: DISTRIBUTION_DETAIL-10:ORA-01403: no data found。

這個Bug在11.5.10.2版本還是偶爾會出現,不過有個最簡單的方法,就將原本收料進來的資料,用更正(Corrections)
Inventory Responsibility->Transactions->Receiving->Corrections這支程式,將原來的數量更正為0。

例如原本收料(Receipts)數量為:100,則更正(Corrections)數量成:-100,然後再重做新收料(Receipts)->入庫(Receiving Transactions),就可以解決了。
當然這不是長遠之計,如果太頻繁,還是去metalink.oracle.com開個SR處理。

2007年10月17日 星期三

[google] Google Analytics 免費的神奇網站流量分析服務

經朋友介紹說google有一個好用的網站流量分析服務「Google Analytics」,昨天抽空測試了一下,還真是神奇,越來越佩服google的創舉了。

如同Google Analytics網站寫到「發現。分享。行動。」新的 Google Analytics (分析) 可讓您輕易改善線上的結果。撰寫更棒的廣告、強化您的行銷計劃,並建立高轉換率的網站。Google

Analytics (分析) 可免費提供給所有廣告客戶、發佈者和網站擁有者。
現在我們就來看看如何使用:首先至 http://www.google.com/analytics/zh-TW/ 登入google帳號


選擇[申請] 申請 Google Analytics (分析),申請完成後會用Email來做身份確認



輸入監控分析的網站



再來是進入設定的部份,就是在要分析的網站網頁裡面加一段Google Analytics給的script,當有使用者流覽時,這段script就會把資料傳到Google Analytics,所以要追蹤的網站都要加入這段script,如此Google Analytics才能收集資料分析。

來看看自己網站的成果,人氣真是不旺,哈。
控制主頁


訪客分佈圖




更多功能

2007年10月16日 星期二

[PL/SQL] 善用動態SQL、PL/SQL

自Oracle 8i後,動態SQL有了第二個選擇:native dynamic SQL (NDS)。相對於DBMS_SQL,
他的優點除了較易撰寫,而且也能較快執行,Oracle ERP開的很多Package也都有他的影子。
動態 SQL
語法:
EXECUTE IMMEDIATE Sql_string
[INTO {define_list … record}]

[USING [IN OUT IN OUT] bind_list …];
Sql_string
此為字串運算式,可包括SQL語句或PL/SQL區塊。
define_list
此為變數,接收查詢回來的資料欄位值。
record
此可以是以使用者定義的TYPE或%ROWTYPE為基礎的紀錄,接收查詢回來的資料列。
bind_list
此為運算式,其值是傳給Sql_string。或為識別字,可當作輸出輸入變數使用。
INTO 子句
用於單列查詢上。指定接收查詢回來的資料欄位值。
USING 子句
此能讓你對SQL字串提共繫結引數,此用法通常與PL/SQL有關,預設值為IN。




測試一:
SQL> SELECT DEPTNO, DNAME FROM DEPT;
DEPTNO DNAME
---------- ----------------------------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
BEGIN
EXECUTE IMMEDIATE 'UPDATE DEPT SET DNAME = ''TEST'' WHERE DNAME = ''ACCOUNTING''';
END;
/

PL/SQL 程序順利完成.
SQL> SELECT DEPTNO, DNAME FROM DEPT;
DEPTNO DNAME
---------- ----------------------------
10 TEST
20 RESEARCH
30 SALES
40 OPERATIONS

測試二:
SQL> DECLARE
2 V_NAME DEPT.DNAME%TYPE;
3 BEGIN
4 EXECUTE IMMEDIATE 'SELECT DNAME FROM DEPT WHERE DEPTNO= 10'
5 INTO V_NAME;
6 DBMS_OUTPUT.PUT_LINE(‘DNAME IS ’V_NAME);
7 END;
8 /
DNAME IS TEST
PL/SQL 程序順利完成.

測試三:
SQL> DECLARE
2 V_NAME DEPT.DNAME%TYPE;
3 BEGIN
4 EXECUTE IMMEDIATE 'SELECT DNAME FROM DEPT WHERE DEPTNO= :NO'
5 INTO V_NAME
6 USING IN 10;
7 DBMS_OUTPUT.PUT_LINE('DNAME IS 'V_NAME);
8 END;
9 /
DNAME IS TEST
PL/SQL 程序順利完成.




動態 PL/SQL
語法:
OPEN {cursor_variable :host_cursor_variable } FOR SQL_string
[USING bind_argument …];
cursor_variable
此為弱類型CURSOR變數。
:host_cursor_variable
此為CURSOR變數,主要宣告於像是Oracle Call Interface程式的PL/SQL主機環境中。
SQL_string
此主要為需動態執行的SELECT敘述。
USING 子句
此能讓你對SQL字串提共繫結引數,規則與IMMEDIATE相同。


測試:
CREATE OR REPLACE PROCEDURE SP_PMS_SCH_SCHSLIP(IN_STR_DT IN NUMBER,
IN_END_DT IN NUMBER) IS
-- 宣告 REF CURSOR TYPE
TYPE CURSOR_TYPE IS REF CURSOR;

-- 宣告 CUR_PM_SLIP 為 CURSOR_TYPE的CURSOR
CUR_PM_SLIP CURSOR_TYPE;

V_CUR VARCHAR2(3000);
V_SLIP_NO PM_SCHSLIP.SLIP_NO%TYPE;
V_FST_STR_DT PM_SCHSLIP.FST_STR_DT%TYPE;
V_STATUS PM_SCHSLIP.STATUS%TYPE;
V_EST_END_DT PM_SCHSLIP.EST_END_DT%TYPE;
V_SCH_SW PM_SCHSLIP.SCH_SW%TYPE;
V_SCH_ADJ PM_SCHSLIP.SCH_ADJ%TYPE;
V_PRIORITY PM_SCHSLIP.PRIORITY%TYPE;
BEGIN
-- SQL敘述
V_CUR :=
'SELECT A.SLIP_NO, DECODE(SIGN(NVL(A.EST_STR_DT,0)-:1),1,A.EST_STR_DT,:2)
STR_DT, A.STATUS,A.EST_END_DT,A.SCH_SW, A.SCH_ADJ, A.PRIORITY
FROM PM_SLIPM A
WHERE A.GENERATE_CODE = ''Y''
AND A.STATUS NOT IN (''F'',''C'',''H'')
AND NVL(A.EST_STR_DT,0) <= :3
AND NVL(A.SCH_SW,''2'') = ''1'''V_ORDERBY;
-- 開啟CURSOR
OPEN CUR_PM_SLIP
FOR V_CUR USING IN_STR_DT, IN_STR_DT, IN_END_DT; LOOP
-- 擷取資料
FETCH CUR_PM_SLIP INTO V_SLIP_NO, V_FST_STR_DT, V_STATUS,
V_EST_END_DT,V_SCH_SW, V_SCH_ADJ, V_PRIORITY;

EXIT WHEN CUR_PM_SLIP%NOTFOUND;
-- INSERT DATA ...
END LOOP;
COMMIT;
END;
/
其中:1、:2、:3對應IN_STR_DT, IN_STR_DT, IN_END_DT變數

[DB] 查詢被LOCK的TABLE資訊 (SQL Script)

當資料被lock時,下面這段SQL可以方便查出是那個Table locklockmode為何,以及附帶一段kill session指令,方便刪除已當掉的session,不過要提醒的是,沒把握或不清楚時不要亂刪除 session

SELECT A.OBJECT_NAME,
A.OBJECT_TYPE,
B.SESSION_ID,
C.SERIAL#,
B.ORACLE_USERNAME,
B.OS_USER_NAME,
C.MACHINE,
DECODE(B.LOCKED_MODE,0, 'None', 1, 'Null (NULL)', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share (S)', 5, 'S/Row-X (SSX)', 6, 'Exclusive (X)' , '') LOCKED_MODE,
'alter system kill session '''to_char(b.session_id)','to_char(c.serial#)''';' script
FROM ALL_OBJECTS A, V$LOCKED_OBJECT B, V$SESSION C
WHERE A.OBJECT_ID = B.OBJECT_ID
AND B.SESSION_ID = C.SID
ORACLE定義lock mode的7個級別
0 - none - 無
1 - null (NULL) - 可能某些情況下,如分佈式數據庫的查詢會產生此鎖。
2 - row-S (SS) - 表結構共享鎖
3 - row-X (SX) - 表結構共享鎖+被操作的記錄的排它鎖(若有DML操作)
4 - share (S) - 表結構共享鎖+所有記錄共享鎖(隱含)
5 - S/Row-X (SSX) - 表結構共享鎖+所有記錄排它鎖(隱含)
6 - exclusive (X) - 表結構排它鎖

[xsb Oracle Blog]有很好的解釋http://xsb.itpub.net/post/419/38475

[PL/SQL] PL/SQL函數說明

以前收集的PL/SQL函數說明,覺得還不錯,給大家參考參考

PL/SQL函數指令

說明

ABS(n)

絕對值

ACOS(O)

逆三角餘弦值

ADD_MONTHS(dn)

傳回d值加n個月

ASCII(n)

Ascii字元傳回十進位值

ATAN(n)

逆三角正切值(徑,p/2 ~ -p/2)

ATAN2(mn)

逆三角正切值(徑,p ~ -p)

AVG(n)

傳回平均值

BFILENAME(mn)

傳回外部檔案值,m=目錄字串,

n=檔案字串

CEIL(n)

無條件進位的整數

CHARTOROWID

將字元型態轉為ROWID型態

CHR(n)

Chr十進位值,傳回ascii

CONCAT(mn)

不論文字或數字相加,都以字串相

加方式

CONVERT(m,n,z)

將字串轉換另一國家字元設定值

COS(n)

傳回n的餘弦值

COSH(n)

傳回n的雙曲線餘弦值

COUNT(n)

傳回總筆數

DECODE

(C nv1r1v2r2d1)=v2

變數c字串或n數字,=v1則值=r1,則值=v2,或=dl

DUMP(mnn1n2)

傳回m的長度及內碼,n=進位數(預設值=10進位)n1=m的開始位置,n2=取的位無數

EMPTY_[B C] LOB()

BLOBCLOB初始化,就是傳回BLOBCLOB的空指標

EXP(n)

傳回自然對數en次方值

FLOOR(n)

無條件捨去的整數

GREATEST(m)

m可為數字或文字,傳回最大值

GROUPING(n)

傳回群集

HEXTORAW(m)

將十六進位轉換為原始值

INITCAP(n)

傳回字句一個字為大寫

INSTR(char1, char2 [m[n]] )

char1中從m位置起char2n次出現的位置

INSTR(mn)

傳回n字串在m字串中的位置

INSTRB(mn)

byte傳回n字串在m字串中的位置

LAST_DAY(d)

傳回該月的最後一天的日期

LEAST(m1m2m3...mn)

m可為數字或文字,傳回最小值

LENGTH(n)

傳回字串的長度

LENGTHB(n)

byte方式傳回字串的長度

LN(n)

自然對數

LOG(m , n)

m進位的n對數

LOWER

傳回每一字為小寫

LPAD(m , n , z)

n1ength(m)z字元數填入m的左邊

LTRIM(n)

去除字串左邊的空格字元

MAX(n)

傳回最大值

MIN(n)

傳回最小值

MOD(m , n)

m/n整數的餘數

MONTHS_BETWEEN(mn)

傳回m - n的值,單位月(日期相減

單位為日)

NEW_TIME(m , n , z)

n時區的日期、時間是m,傳回在

z時區的日期時間

NEXT_DAY(m , n)

下一個星期n(1-7=sun-sat)是那一天

NLS_CHARSET_DECL_LEN(M , N)

傳回所要的字體組對應當前資料庫

的字體組,m=字體數;n=字體組(:'ZHT16BIG5')

NLS_CHARSET_ID(m)

傳回字體組的識別碼,m=字體組

NLS_CHARSET_NAME(n)

傳回字體組,n=字體組的識別碼

NLS_INITCAP(m [,N])

傳回字句一個字為大寫(依照國家

語言不同)

NLS_LOWER

傳回每一字為小寫(依照國家語言

不同)

NLS_UPPER

傳回每一字為大寫(依照國家語言

不同)

NLSSORT

決定排列順序(依照國家語言不同)

NVL(mn)

mNULL則傳回n值,否則傳回

m

NVL2(m , n , z)

POWER(m , n)

傳回mn次方

RAWTOHEX(m)

將原始值(例如A=65)進位轉換為

十六進位

REPLACE(m , n [, z] )

M字串中去除n字串以z字串取代

ROUND(d)

日期四捨五入以中午為中點

ROUND(m [, n])

算數m四捨五入,取到小數點第n

[n default=0]

ROWIDTOCHAR(m)

ROWID型態轉為字元型態

RPAD(m , n , z)

n1ength(m)z字元數填入m的右邊

RTRIM(n)

去除字串右邊的空格字元

SIGN(n)

信號的傳回,n<0-1n=00n>0 1

SIN(n)

傳回n的正弦值

SINH(n)

傳回n的雙曲線的正弦值

SOUNDEX(m)

傳回以字串m的聲音(可做文字發音比對)

SQRT(n)

傳回n開平方根的值

STDDEV(n)

傳回標準差

SUBSTR(m , n , z)

m字串中從頭n數位開始取,取z

個字元

SUBSTRB(m , n , z)

byte方式m字串中從頭n數位開始取,取z個字元

SUM(n)

傳回加總

SYS_CONTEXT(m , n)

傳回與某一個context名稱關聯的Package spec定義的變數的值,m=context的名稱,n=變數名稱

SYS_GUID()

傳回全球獨一無二的識別碼

SYSDATE

傳回系統日期

TAN(n)

傳回n的正切值

TANH

傳回n的雙曲線的正切值

TO_CHAR(dt)

將日期格武轉換為文字格式,d=日期,t=日期型態格武

TO_CHAR(n)

將數字格式轉換為文字格式

TO_DATE(m , t)

將文字格式轉換為日期格式,m=字串,t=日期型態格式

TO_LOB(m)

LONG的資料型態轉換成LOB的資料型態

TO_MULTI_BYTE(m)

CHAR的資料型態轉換成多位元的字體

TO_NUMBER(m)

將字串轉成數字

TO_SINGLE_BYTE(m)

將多位元的字體轉換成CHAR的字體

TRANSLATE(m using n)

Char轉咸nchar

TRANSLATE(m , n [,z])

n字串尋找m字串,以z字串取代

TRIM(n)

去除字串左、右邊的空格字元

TRUNC(d [, n])

d截斷到n[n default=NULL()]n='month'截斷到月

TRUNC(m [, n])

m截斷到n[n default=0]n=-1則截斷個位為0

UID(m)

傳回目前的使用者的唯一識別碼

UPPER(n)

傳回每一字為大寫

USER

傳回使用者名稱

USERENV(m)

傳回使用者環境參數的資訊

VARIANCE(n)

傳回變異量

VSIZE(m)

傳回字串的bytes