Oracle PL/SQL (3) - 記錄類型(TYPE 類型名稱 IS RECORD)

對于Oracle數(shù)據(jù)類型擂找,主要使用的是VARCHAR2迄损、NUMBER奈应、DATE等類型澜掩,但是這些基本數(shù)據(jù)類型,如果在進(jìn)行一些實際操作的時候就會比較麻煩杖挣。
獲取一個雇員的完整信息:

例如下面這個例子输硝,各個數(shù)據(jù)類型均被單獨定義.

declare
      v_claimno         emb.claim.claimno%TYPE;
      v_accidentno      emb.claim.acc_no%TYPE;
      v_totalamount     emb.claim.estimate_amount%TYPE;
      v_assigndate      emb.claim.assigndate%TYPE;
begin
      v_claimno:='541';
      select t.acc_no,t.estimate_amount,t.assigndate into v_accidentno, v_totalamount, v_assigndate from claim t where t.claimno=v_claimno;
      DBMS_OUTPUT.put_line('事故號:'||v_accidentno||'   定損總金額:'||NVL(v_totalamount,2)||'  任務(wù)分配時間:'||TO_CHAR(v_assigndate,'yyyy-mm-dd'));
  EXCEPTION
     WHEN others THEN
        RAISE_APPLICATION_ERROR(-20007,'此定損單不存在!');
end;
/

輸出結(jié)果:
事故號:9040622410008F03AD
定損總金額:1862.46
任務(wù)分配時間:2020-03-30

1程梦、定義記錄類型語法

TYPE 類型名稱 IS RECORD (
成員名稱        數(shù)據(jù)類型 [[NOT NULL] [:= 默認(rèn)值] 表達(dá)式] ,
...
成員名稱        數(shù)據(jù)類型 [[NOT NULL] [:= 默認(rèn)值] 表達(dá)式]
) ;
1点把、使用記錄類型接收查詢返回結(jié)果
declare
   v_claimno              emb.claim.claimno%TYPE;
   TYPE claim_type IS RECORD(
      v_accidentno      emb.claim.acc_no%TYPE,
      v_totalamount     emb.claim.estimate_amount%TYPE,
      v_assigndate      emb.claim.assigndate%TYPE         
   );
   v_claim claim_type;
begin
    v_claimno:='541';
      select t.acc_no,t.estimate_amount,t.assigndate into v_claim from claim t where t.claimno=v_claimno;
      DBMS_OUTPUT.put_line('事故號:'||v_claim.v_accidentno||'   定損總金額:'||NVL(v_claim.v_totalamount,2)||'  任務(wù)分配時間:'||TO_CHAR(v_claim.v_assigndate,'yyyy-mm-dd'));
  EXCEPTION
     WHEN others THEN
        RAISE_APPLICATION_ERROR(-20007,'此定損單不存在!');
end;
/

輸出結(jié)果:
事故號:9040622410008F03AD
定損總金額:1862.46
任務(wù)分配時間:2020-03-30

2屿附、自定義記錄類型數(shù)據(jù)郎逃,聲明變量,并為屬性賦值.
declare
   TYPE claim_type IS RECORD(
      v_accidentno      emb.claim.acc_no%TYPE :='90406224',-- 定義默認(rèn)值
      v_version     emb.claim.version%TYPE,
      v_validflag      emb.claim.valid%TYPE 
   );
   v_claim claim_type;
begin
      v_claim.v_version:='E01';-- 為記錄類型成員賦值
      v_claim.v_validflag:='1';-- 為記錄類型成員賦值

      DBMS_OUTPUT.put_line('事故號:'||v_claim.v_accidentno||'   版本號:'||v_claim.v_version||'  有效標(biāo)識:'||v_claim.v_validflag);
  EXCEPTION
     WHEN others THEN
        RAISE_APPLICATION_ERROR(-20007,'此定損單不存在挺份!');
end;
/

輸出結(jié)果:事故號:90406224 版本號:E01 有效標(biāo)識:1

3褒翰、定義嵌套的記錄類型
declare
   v_claimno              emb.claim.claimno%TYPE;
   TYPE claim_type IS RECORD(
      v_accidentno      emb.claim.acc_no%TYPE,
      v_totalamount     emb.claim.estimate_amount%TYPE,
      v_assigndate      emb.claim.assigndate%TYPE         
   );
   
   TYPE config_type is RECORD (
     v_paintflag             emb.config.paintconfig%TYPE:=0,
     v_repairflag            emb.config.repairconfig%TYPE :=1,
     v_discountflag      emb.config.discountflag%TYPE:=2,
     v_claim  claim_type
   );
   
   
    v_config_type  config_type ;
begin
    v_claimno:='541';
      select t.acc_no,t.estimate_amount,t.assigndate into v_config_type.v_claim from claim t where t.claimno=v_claimno;
      DBMS_OUTPUT.put_line('事故號:'||v_config_type.v_claim.v_accidentno||'   定損總金額:'||NVL(v_config_type.v_claim.v_totalamount,2)
      ||'  任務(wù)分配時間:'||TO_CHAR(v_config_type.v_claim.v_assigndate,'yyyy-mm-dd')||'  噴漆標(biāo)識'||v_config_type.v_paintflag||'  維修標(biāo)識'
      ||v_config_type.v_repairflag||'  折扣標(biāo)識'||v_config_type.v_discountflag);
  EXCEPTION
     WHEN others THEN
        RAISE_APPLICATION_ERROR(-20007,'此定損單不存在!');
end;
/

輸出結(jié)果:
事故號:9040622410008F03AD 定損總金額:1862.46 任務(wù)分配時間:2020-03-30 噴漆標(biāo)識0 維修標(biāo)識1 折扣標(biāo)識2

4、插入記錄优训,利用記錄類型保存數(shù)據(jù)
DECLARE
    TYPE config_type is RECORD (
     v_paintflag             emb.config.paintconfig%TYPE:=0,
     v_repairflag            emb.config.repairconfig%TYPE :=1,
     v_discountflag      emb.config.discountflag%TYPE:=2,
     v_claim  claim_type
   );
    v_config_type  config_type ;
BEGIN
  v_config_type.v_paintflag := 0 ;
  v_config_type.repairconfig := 1 ;
  v_config_type.discountflag := 2 ;
INSERT INTO config VALUES v_config_type ;     -- 直接插入記錄類型的數(shù)據(jù)
END ;
/
5朵你、不需要插入全表數(shù)據(jù),插入指定欄位的數(shù)據(jù)
DECLARE
    TYPE config_type is RECORD (
     v_paintflag             emb.config.paintconfig%TYPE,
     v_repairflag            emb.config.repairconfig%TYPE,
     v_discountflag          emb.config.discountflag%TYPE,
     v_claim  claim_type
   );
    v_config_type  config_type ;
BEGIN
  v_config_type.v_paintflag := 0 ;
  v_config_type.repairconfig := 1 ;
  v_config_type.discountflag := 2 ;
INSERT INTO config(paintconfig,repairconfig,discountflag) VALUES (v_config_type.v_paintflag,v_config_type.v_repairflag,v_config_type.v_discountflag) ;     -- 直接插入記錄類型的數(shù)據(jù)
END ;
/
6揣非、修改數(shù)據(jù)抡医,利用記錄類型保存數(shù)據(jù)
DECLARE
    v_claimno              emb.claim.claimno%TYPE:='541';
    TYPE config_type is RECORD (
     v_paintflag             emb.config.paintconfig%TYPE,
     v_repairflag            emb.config.repairconfig%TYPE,
     v_discountflag      emb.config.discountflag%TYPE,
     v_claim  claim_type
   );
    v_config_type  config_type ;
BEGIN
  v_config_type.v_paintflag := 1 ;
  v_config_type.repairconfig := 0 ;
  v_config_type.discountflag := 1 ;
UPDATE  config SET ROW=v_config_type WHERE  claimno=v_claimno;      
END ;
/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市早敬,隨后出現(xiàn)的幾起案子忌傻,更是在濱河造成了極大的恐慌,老刑警劉巖搞监,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件水孩,死亡現(xiàn)場離奇詭異,居然都是意外死亡琐驴,警方通過查閱死者的電腦和手機(jī)俘种,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绝淡,“玉大人宙刘,你說我怎么就攤上這事」晃” “怎么了荐类?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茁帽。 經(jīng)常有香客問我玉罐,道長,這世上最難降的妖魔是什么潘拨? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任吊输,我火速辦了婚禮,結(jié)果婚禮上铁追,老公的妹妹穿的比我還像新娘季蚂。我一直安慰自己,他們只是感情好琅束,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布扭屁。 她就那樣靜靜地躺著,像睡著了一般涩禀。 火紅的嫁衣襯著肌膚如雪料滥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天艾船,我揣著相機(jī)與錄音葵腹,去河邊找鬼高每。 笑死,一個胖子當(dāng)著我的面吹牛践宴,可吹牛的內(nèi)容都是我干的鲸匿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼阻肩,長吁一口氣:“原來是場噩夢啊……” “哼带欢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起磺浙,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤洪囤,失蹤者是張志新(化名)和其女友劉穎徒坡,沒想到半個月后撕氧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡喇完,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年伦泥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锦溪。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡不脯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刻诊,到底是詐尸還是另有隱情防楷,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布则涯,位于F島的核電站复局,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粟判。R本人自食惡果不足惜亿昏,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望档礁。 院中可真熱鬧角钩,春花似錦、人聲如沸呻澜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羹幸。三九已至脊髓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睹欲,已是汗流浹背供炼。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工一屋, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袋哼。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓冀墨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涛贯。 傳聞我的和親對象是個殘疾皇子诽嘉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容