對于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 ;
/