国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

oracle毛病(二)

2024-08-29 13:45:18
字體:
來源:轉載
供稿:網友

  
接第一篇:
11. PL/SQL的用戶們, 看看下面:
  創建一個沒帶參數的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的語法. 但我們是為了區別于其它類型的存儲過程, 為了讓用戶覺得
  Oracle高深莫測一點.
  怎么就一個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 dba_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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赤壁市| 昭平县| 石狮市| 呼玛县| 漳浦县| 宜城市| 泽普县| 双辽市| 韶关市| 泗洪县| 资阳市| 平阴县| 哈巴河县| 饶平县| 青田县| 哈尔滨市| 昌邑市| 雅安市| 射阳县| 静乐县| 广元市| 永靖县| 武山县| 洪泽县| 鹤峰县| 无为县| 凤山市| 子洲县| 平陆县| 五原县| 永福县| 峡江县| 新营市| 海南省| 佳木斯市| 尖扎县| 呼图壁县| 西吉县| 罗山县| 河东区| 汕尾市|