會碰到oracle是因為專題,內建的webmin(IEonly xd)和PL/SQL,但一般使用還是mysql比較簡單吧:q
畢竟使用群不同,像是之前要找一個oracle client+ER diagram產生,找到的都是商業軟體超貴,不像mysql有一海票
然後呀,oracle現在XE版是免費自由使用的,其他版本用在開發上也都可以免費下載使用。其實這已經是很久很久以前的新聞了,只是好像很多人還是不知道。
引述鄉民推文:
→ westlife138 推:oracle不是超貴@@ 08/06/12
→ easy 推:嘖嘖..應該是水貨 XD 08/06/12
連上database課的老師上課都在那邊說學校買不起超好笑,專題展報專題也被評審質問我們oracle是不是正版的orz
有時候感覺教授們除了conference、journal、paper上得東西以外,其他資訊和業界動態真的有點lag xd
以下只是個人筆記,應該很多人寫過了文件也有(不知道為甚麼連oracle官網超慢),based on Oracle 11g XE
一.流水號
oracle不能像mysql簡單產生流水號,必須要新增"sequence"再用"trigger"去產生
1.建立sequence
CREATE SEQUENCE "TRANSACTION_SEQ" MINVALUE 1024 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1144 NOCACHE ORDER NOCYCLE以上SQL建立一個sequence "TRANSACTION_SEQ",範圍1024~999999999999999999999999999,從1144開始
特別要注意的是要NOCACHE要不然號碼會亂跳,而且每個relational schema通常要對應一個專用的sequence。
2.建立trigger
CREATE OR REPLACE TRIGGER "BANKINFORM_T1"
BEFORE
insert on "BANKINFORM"
for each row
begin
SELECT BANK_INFORM1_SEQ.NEXTVAL INTO :NEW.NO FROM DUAL;
end;
以上sql code 建立trigger "BANKINFORM_T1",他會在"BANKINFORM"這個table做insert前在要insert的"NO"這個欄位自動插入流水號,即使你的insert on語句有對"NO"設定值也會被蓋掉(因為是再妳輸入指令之後才激發他的trigger)。
二. 欄位預設值
跟流水號很像,只是輸入的是constant
CREATE OR REPLACE TRIGGER "BANKINFORM_T1"
BEFORE
insert on "BANKINFORM"
for each row
begin
SELECT 0 INTO :NEW.NO FROM DUAL;
end;
"NO"會自動填入預設值為0
三.時戳
CREATE OR REPLACE TRIGGER "LOG_T2"於"TIME"欄位自動填入系統現在時間
BEFORE
insert on "LOG"
for each row
begin
SELECT systimestamp INTO :NEW.TIME FROM DUAL;
end;
四. table間資料同步
CREATE OR REPLACE TRIGGER "TRANSACTION_ACCT_UPDATE"
AFTER
insert ON transaction_acct
FOR EACH ROW
DECLARE
v_no TRANSACTION_ACCT.ACCOUNT_NO%TYPE;
v_balance0 ACCOUNT.BALANCE%TYPE;
v_withdrawal TRANSACTION_ACCT.WITHDRAWAL%TYPE;
v_deposit TRANSACTION_ACCT.DEPOSIT%TYPE;
BEGIN
v_deposit := :new.DEPOSIT;
v_withdrawal := :new.WITHDRAWAL;
v_no := :new.ACCOUNT_NO;
SELECT ACCOUNT.BALANCE
INTO v_balance0
FROM ACCOUNT
WHERE ACCOUNT.NO= v_no;
update ACCOUNT
set ACCOUNT.BALANCE=(v_balance0+v_deposit-v_withdrawal)
where ACCOUNT.NO=v_no;
END;
這一個trigger會在"TRANSACTION_ACCT"插入交易紀錄後,依據交易紀錄自動跟新"ACCOUNT"這個table的balance欄位,其實就是
balance=balance+deposit-withdrawal;
其實很多事都可以在應用端eg. PHP簡單解決,只是能在database上就搞定也不錯。
其實一般應用還是PHP+mysql才是王道呀
小公司或學校計中都是找這種人,我報JavaEE+oracle就被刷掉了(翻桌)

0 意見:
張貼意見