溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PL/SQL復(fù)合變量

發(fā)布時(shí)間:2020-08-28 04:22:40 來(lái)源:網(wǎng)絡(luò) 閱讀:311 作者:yeleven 欄目:關(guān)系型數(shù)據(jù)庫(kù)

復(fù)合變量可以將不同數(shù)據(jù)類型的多個(gè)值存儲(chǔ)在一個(gè)單元中。由于復(fù)合類型可以由用戶自己根據(jù)需要定義其結(jié)構(gòu),所以復(fù)合數(shù)據(jù)類型也稱為自定義數(shù)據(jù)類型。


在PL/SQL中,使用%TYPE聲明的變量類型與數(shù)據(jù)表中字段的數(shù)據(jù)類型相同,當(dāng)數(shù)據(jù)表中字段數(shù)據(jù)類型修改后,PL/SQL程序中相應(yīng)變量的類型也自動(dòng)隨之改變。

如EMP表中有一個(gè)ENAME字段,其數(shù)據(jù)類型為VARCHAR2(30),聲明變量v_name用來(lái)存放ENAME字段的數(shù)據(jù),聲明如下:

v_name emp.ename%TYPE;

則變量v_name的數(shù)據(jù)類型始終與ENAME字段的類型保持一致,即VARCHAR2(30),當(dāng)ENAME字段的數(shù)據(jù)類型改為VARCHAR2(50)時(shí),v_name變量的數(shù)據(jù)類型也自動(dòng)修改為VARCHAR2(50)。

DECLARE

    v_name emp.ename%TYPE;

BEGIN

    SELECT ename INTO v_name FROM emp

        WHERE empno=7788;

    DBMS_OUTPUT.PUT_LINE(v_name);

END;

/


PL/SQL提供了%ROWTYPE來(lái)存儲(chǔ)一行數(shù)據(jù)。例如,要定義DEPT表中的一行記錄,并且數(shù)據(jù)類型和每列類型一致可以使用%ROWTYPE,聲明如下:

dept_record dept%ROWTYPE;

下面使用%ROWTYPE類型的變量存儲(chǔ)DEPT表中的一行數(shù)據(jù),示例如下:

DECLARE

    v_dept dept%ROWTYPE;

BEGIN

    SELECT * INTO v_dept FROM dept

    WHERE deptno=30;

    DBMS_OUTPUT.PUT_LINE(v_dept.deptno);

    DBMS_OUTPUT.PUT_LINE(v_dept.dname);

    DBMS_OUTPUT.PUT_LINE(v_dept.loc);

END;

/


記錄類型與數(shù)據(jù)庫(kù)中的行結(jié)構(gòu)非常類似,使用記錄類型定義的變量可以存儲(chǔ)由多個(gè)列值組成的一行數(shù)據(jù)。當(dāng)使用記錄類型的變量時(shí),首先需要定義記錄的結(jié)構(gòu),然后定義記錄類型的變量。定義記錄類型時(shí)必須使用TYPE語(yǔ)句指出將在記錄中包含的字段及其數(shù)據(jù)類型,語(yǔ)法如下:

DECLARE

    TYPE emp_record_type IS RECORD(

        name emp.ename%TYPE,

        salary emp.sal%TYPE,

        dno emp.deptno%TYPE);  --自定義變量類型emp_record_type

    emp_record emp_record_type;  --定義emp_record_type類型的變量emp_record

BEGIN

    SELECT ename,sal,deptno INTO emp_record

        FROM emp WHERE empno=7788;  --查詢ename,sal,deptno賦值給變量emp_record

    DBMS_OUTPUT.PUT_LINE(emp_record.name);

END;

/

--------------------------------------------------

DECLARE

    TYPE emp_record_type IS RECORD(

        name emp.ename%TYPE,

        salary emp.sal%TYPE,

        dno emp.deptno%TYPE);  --自定義變量類型emp_record_type

    emp_record emp_record_type;  --定義emp_record_type類型的變量emp_record

BEGIN

    SELECT ename,sal INTO emp_record.name,epm_record.salary

        FROM emp WHERE empno=7788;  --查詢ename,sal,deptno賦值給變量emp_record

    DBMS_OUTPUT.PUT_LINE(emp_record.name);

END;

/


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI