oracle毛病(二) (轉)
接第一篇:
11. 的們, 看看下面:
建立一個沒帶引數的procedure:
create or replace procedure proc_name as
i number;
begin
...
end proc_name;
建立一個帶引數的procedure:
create or replace procedure proc_name(arg1,...) as
i number;
begin
...
end proc_name;
你很習慣用declare來宣告嗎? 不行, 這裡不行, 你必需聽我的, 用as
建立一個:
create or replace trigger tri_name before insert on tname for each
row
declare
i number;
begin
..
end;
因為這是觸發器, 所以它要用declare來宣告變數, 儘管觸發器用的也是PL/
SQL的語法. 但我們是為了區別於其它型別的過程, 為了讓使用者覺得
高深莫測一點.
怎麼就一個end;不是end tri_name嗎? 是的, procedure和function是這樣
設計的, 但這樣可以讓使用者覺得更難用一點麼!
(sqlplus下)你一個不帶引數的procedure:
call proc_name();
(sqlplus下)你呼叫一個不帶引數的procedure:
call proc_name(arg1, arg2);
是的, 它不是可選的, 它必需如此, 定義一個沒有引數的procedure就是不
要空的()號, 但呼叫它的時侯就是要, 定義一個有引數的procedure當然也要.
function的情況與這個也一樣.
你呼叫一個function:
ret_val := func_name();
什麼? 你不需要ret_val, 不行, 這是強買強賣, 不要不行. 否則我不幹活!
而且, 哼哼, 我給出的錯誤資訊保證你看不懂.
你要玩更高階的設計方法, 用上包了:
create or replace package pack_name as
....
end pack_name;
是的, 這只是包的宣告.
要想定義這個包, 你還得:
create or replace package body pack_name as
procedure proc_name is
--你不是說用as嗎? 是的, 但是這裡as已經被上一條語句用了, 呶! 你
也看到了. 用is有什麼不好?
end proc_name
function func_name is
...
end func_name
end pack_name;
12. 看看出錯資訊, 來自SQLPLUS的, 來自Pro*C預的, 來自其它工具如
imp, exp, sqllda的. 說不準你也別誤導呀.
13. 疲憊不堪的Pro*C員們:
在foo中你已經宣告瞭
EXEC SQL WHENEVER SQLERROR GOTO sql_err;
在另一個函式bar裡你只想默默地使用
EXEC SQL WHENEVER SQLERROR CONTINUE;
但你沒特別宣告, Pro*C的預編譯器會告訴你, 它在函式bar中找不到sql_err
標號!!! 它可以跨函式使用標號. 它也敢自稱是一個預跟編譯器沾沾
邊, 剛才用陳橋五筆敲出來的處理器三個字恰好跟處理品是同樣的鍵碼, 我看
叫處理品倒是名符其實.
14. DDL語句的使用者們:
alter table tname add(col1 type...);
alter table tname modify(col1 type...);
alter table tname drop column(col1);
為何非要在drop裡多出來一個column?
15. 命名
user_cons_columns;
user_constraints;
user_rollback_segs;
它真的要把segment統統縮寫為segs嗎? 把constraints縮寫為cons? 把
columns縮寫為cols? 不, ORACLE的程式設計師們想怎麼樣就怎麼樣. 他們是覺得
單詞的全稱太長了嗎? 不見得, desc a_users;看一下
看看INITIAL_RSRC_CONSUMER_GROUP欄位, 看看temporary_tablespace欄位.
再來看看一下create table:
create table tname (col1 type,...) storage(initial .. next ..
minextents .. maxextents ..) ...;
desc user_tables;
inital_extent
next_extent
minextents
maxextents
不要問他們為什麼有的用單數有的用複數, 因為他們是ORACLE. 他們想這樣.
dba_tables中owner
dba_sequences中叫sequence_owner
user_tab_columns是關於一張表中列資訊的, _tab_columns
user_cons_columns是關於表中欄位的資訊的, _cons_columns
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992583/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- redhat5 的毛病Redhat
- ORACLE備份策略二(轉)Oracle
- ORACLE碎片整理二(轉載)Oracle
- oracle data Format Models---二(轉)OracleORM
- ORACLE分析函式手冊二(轉)Oracle函式
- ORACLE備份&恢復案例二(轉)Oracle
- 轉貼oracle直方圖histogram(二)Oracle直方圖Histogram
- 開源軟體許可出毛病了?
- 996我沒覺得有啥毛病啊996
- ORACLE SQL效能最佳化系列 (二) (轉)OracleSQL
- 程式設計師的七大壞毛病程式設計師
- Oracle分析函式參考手冊(轉)二Oracle函式
- Oracle11新特性——行列轉換語句(二)Oracle
- Python的 5 種高階用法,效率提升沒毛病!Python
- Oracle查詢轉換(二)複雜檢視合併Oracle
- Oracle二進位制與十進位制轉換Oracle
- Oracle SQL效能最佳化系列講座之二(轉)OracleSQL
- Oracle建立二進位制檔案索引的方法(轉)Oracle索引
- 程式設計師面試因抽菸被拒,網友:沒毛病程式設計師面試
- Oracle Flashback(二)Oracle
- oracle 程式(二)Oracle
- Oracle梳理二Oracle
- 轉Oracle語句優化53個規則詳解 (二)Oracle優化
- ORACLE資料庫的啟動和關閉之二(轉)Oracle資料庫
- 在Linux機器上安裝執行Oracle(二)(轉)LinuxOracle
- 【Oracle】Oracle常用EVENT之二Oracle
- 二轉十
- 十轉二
- 從Java的型別轉換看MySQL和Oracle中的隱式轉換(二)Java型別MySqlOracle
- Windows XP下安裝Oracle9i問題二則(轉)WindowsOracle
- ORACLE DATE和TIMESTAMP資料型別的比較(二) (轉)Oracle資料型別
- oracle重建索引(二)Oracle索引
- oracle壞塊(二)Oracle
- ORACLE與hugepage(二)Oracle
- Oracle RAC搭建(二)Oracle
- Oracle DataPump之二Oracle
- oracle遞迴(二)Oracle遞迴
- oracle undo系列(二)Oracle