oracle record 遍历,ORACLE中RECORD、VARRAY、TABLE的使用详解
好處是表字段發(fā)生變化,記錄字段自動改變。但是,由于每次執(zhí)行前,遇到%TYPR或%ROWTYPE,
數(shù)據(jù)庫系統(tǒng)都會去查看對應(yīng)表字段類型,會造成一定的數(shù)據(jù)庫開銷,如果系統(tǒng)中大量使用記錄類型,則對性能會有一定影響。
另外如果刪除了某一字段,而自定義記錄中使用了該字段,也會有可能忘記刪除該字段。
對數(shù)據(jù)庫負荷偏低的系統(tǒng),性能問題一般可以不重點關(guān)注,但是對于高負荷數(shù)據(jù)庫服務(wù)器,
各個環(huán)節(jié)都要考慮性能問題,每處節(jié)省一點出來,性能整體就有很大提高。
語法:
TYPE? 記錄名? IS RECORD
(
filed1 table.Filed%Type [NOT NULL] [:=eXPr1] ,
filed2 table.Filed%Type [NOT NULL] [:=eXPr1] ,
....... ,
filedn table.Filed%Type [NOT NULL] [:=exprn]
);
例子:記錄可以整體賦值
/*conn scott/tiger
Create Table? empa? As? Select * From emp;
*/
Declare
Type EmpType is Record(
EMPNO number(4),
ENAME? varchar2(10),
JOB varchar2(15),
SAL number(7,2),
DEPTNO number(2)
);
EmpRec1? EmpType;
EmpRec2? EmpType;
Begin
EmpRec1.Empno:=7369;
EmpRec1.Ename:='SMITH';
EmpRec1.Job:='CLERK';
EmpRec1.Sal:=800;
EmpRec1.Deptno:=10;
EmpRec2 := EmpRec1;
DBMS_output.put_line(EmpRec2.empno);
End;
例子:記錄不可以整體比較,只可以比較記錄字段
Declare
Type EmpType is Record(
EMPNO number(4),
ENAME? varchar2(10),
JOB varchar2(15),
SAL number(7,2),
DEPTNO number(2)
);
EmpRec1? EmpType;
EmpRec2? EmpType;
Begin
EmpRec1.Empno:=7369;
EmpRec1.Ename:='SMITH';
EmpRec1.Job:='CLERK';
EmpRec1.Sal:=800;
EmpRec1.Deptno:=10;
if EmpRec1.sal < EmpRec2.sal then
DBMS_output.put_line('Xiao Xiao Xiao');
end if;
End;
例子:記錄不可以整體判斷為空,只可以判斷記錄字段。
Declare
Type EmpType is Record(
EMPNO number(4),
ENAME? varchar2(10),
JOB varchar2(15),
SAL number(7,2),
DEPTNO number(2)
);
EmpRec? EmpType;
Begin
if EmpRec.ename is null then
DBMS_output.put_line('Kong Kong Kong');
end if;
End;
例子:使用%TYPE和%ROWTYPE動態(tài)指定記錄字段。
/*conn scott/tiger
Create Table? empa? As? Select * From emp;
*/
DECLARE
Type MyRecType Is? Record
(
RENO? EMPA.EMPNO%Type,
RENAME?? EMPA.ENAME%Type,
RJOB? ?EMPA.JOB%Type
);
EmpRec? MyRecType;
Begin
Select?? EMPNO, ENAME, JOB? InTo? EmpRec? From empa Where empa.EMPNO = '7369';
If? EmpRec.RJOB? = 'CLERK'? Then
DBMS_OUTPUT.PUT_LINE('Name: '||EmpRec.RENAME);
End If;
End;
例子:數(shù)據(jù)集中的記錄和記錄類型中的數(shù)據(jù)關(guān)系。
DECLARE
Type MyRecType Is? Record
(
RENO? EMPA.EMPNO%Type,
RENAME?? EMPA.ENAME%Type,
RJOB? ?EMPA.JOB%Type
);
EmpRec? MyRecType;
vJob? EMPA.JOB%Type;
Begin
Select?? EMPNO, ENAME, JOB? InTo? EmpRec? From empa Where empa.EMPNO = '7369';
DBMS_OUTPUT.PUT_LINE('MyRecType.RJOB: '||EmpRec.RJOB);
EmpRec.RJOB? := '修改值后'? ;
DBMS_OUTPUT.PUT_LINE('MyRecType.RJOB: '||EmpRec.RJOB);
Select JOB? InTo vJob? from empa? Where empa.EMPNO = EmpRec.RENO;
DBMS_OUTPUT.PUT_LINE('EMPA.JOB: '||vJob);
End;
/四,使用記錄向表中插入數(shù)據(jù)??根據(jù)表結(jié)構(gòu)合理安排記錄字段。比如主外鍵。
如果用記錄(RECORD)插入數(shù)據(jù),那么只能使用記錄成員;
如果用%ROWTYPE插入數(shù)據(jù),可以直接使用%ROWTYPE。
例子:使用記錄成員向表中插入數(shù)據(jù)
DECLARE
Type MyRecType Is? Record
(
RENO? EMPA.EMPNO%Type,
RENAME?? VARCHAR2(10),
RJOB? ?EMPA.JOB%Type
);
EmpRec MyRecType;
Begin
Select?? EMPNO, ENAME, JOB? InTo? EmpRec? From empa Where empa.EMPNO = '7369';
DBMS_OUTPUT.PUT_LINE(EmpRec.RENO||'? '||EmpRec.RENAME||'? '||EmpRec.RJOB);
EmpRec.RENO? := 1001;
EmpRec.RENAME := '杰克';
EmpRec.RJOB? := '辦事員';
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的oracle record 遍历,ORACLE中RECORD、VARRAY、TABLE的使用详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 引用foot.html,html
- 下一篇: 晟数学院 oracle,Oracle 控