このトピックでは、変数宣言で % TYPEを使用する方法について説明します。
概要
変数は、テーブルからの値をデータベースに格納するためにSPLプログラムで宣言されます。 テーブル列とSPL変数の互換性を確保するには、列と変数のデータ型が同じである必要があります。 列のデータ型を変更する場合は、対応するSPLプログラムの変数のデータ型を変更する必要があります。 column属性 % TYPEを使用できます。 この方法では、特定の列データ型を変数宣言としてエンコードする必要はありません。 ドット表記の修飾列名または以前に宣言された変数の名前は、% TYPEのプレフィックスとして指定する必要があります。 宣言する変数に, % typeというプレフィックスが付いた列または変数のデータ型が代入されます。 指定された列または変数のデータ型が変更された場合、新しいデータ型は変数に関連付けられます。 これにより、宣言を変更する必要がなくなります。
説明 % TYPE属性は、仮パラメーター宣言とともに使用することもできます。
構文
name { { table | view }.column | variable }% TYPE;
パラメーター
フィールド | 概要 |
name | 宣言される仮パラメーター、または変数に割り当てられている識別子。 |
column | テーブルまたはビュー内の列の名前。 |
variable | nameで識別される変数の前に宣言された変数の名前。 |
説明 変数は、not NULL句、DEFAULT句、または
:
=代入演算子を使用して列で指定できる属性など、列の他の属性を継承しません。 例:
以下のストアドプロシージャでは、システムは、従業員番号を使用することによってemp
テーブルを照会し、従業員が属する部門の全従業員の平均給与を取得し、従業員の給与を部門の平均給与と比較する。
CREATE OR REPLACE PROCEDURE emp_sal_query (
番号でp_empno
)
IS
v_ename VARCHAR2(10);
v_job VARCHAR2(9);
v_hiredate DATE;
v_sal NUMBER(7,2);
v_deptno NUMBER(2);
v_avgsal番号 (7,2);
開始
SELECT ename, job, hiredate, sal, deptno
INTO v_ename, v_job, v_hiredate, v_sal, v_deptno
empからどこempno = p_empno;
DBMS_OUTPUT.PUT_LINE('Employee # : '| | p_empno);
DBMS_OUTPUT.PUT_LINE('Name : ' || v_ename);
DBMS_OUTPUT.PUT_LINE('Job : ' || v_job);
DBMS_OUTPUT.PUT_LINE('Hire Date : ' || v_hiredate);
DBMS_OUTPUT.PUT_LINE('Salary : ' || v_sal);
DBMS_OUTPUT.PUT_LINE('Dept # : '| | v_deptno);
SELECT AVG(sal) INTO v_avgsal
emp WHEREからdeptno = v_deptno;
IF v_sal > v_avgsal THEN
DBMS_OUTPUT.PUT_LINE (「従業員」の給与は
| | 'の部門平均 | | v_avgsal);
ELSE
DBMS_OUTPUT.PUT_LINE (「従業員」の給与は
| | 'の部門平均 | | v_avgsal);
エンドIF;
エンド;
上記のストアドプロシージャは、次のコードブロックに示すように、別のモードで記述することもできます。 この方法では、ストアドプロシージャの宣言セクションでemp
テーブルのデータ型を明示的にエンコードする必要はありません。
CREATE OR REPLACE PROCEDURE emp_sal_query (
p_empno IN emp.empno % TYPE
)
IS
v_ename emp.ename%TYPE;
v_job emp.job%TYPE;
v_hiredate emp.hiredate%TYPE;
v_sal emp.sal%TYPE;
v_deptno emp.deptno%TYPE;
v_avgsal v_sal % タイプ;
開始
SELECT ename, job, hiredate, sal, deptno
INTO v_ename, v_job, v_hiredate, v_sal, v_deptno
empからどこempno = p_empno;
DBMS_OUTPUT.PUT_LINE('Employee # : '| | p_empno);
DBMS_OUTPUT.PUT_LINE('Name : ' || v_ename);
DBMS_OUTPUT.PUT_LINE('Job : ' || v_job);
DBMS_OUTPUT.PUT_LINE('Hire Date : ' || v_hiredate);
DBMS_OUTPUT.PUT_LINE('Salary : ' || v_sal);
DBMS_OUTPUT.PUT_LINE('Dept # : '| | v_deptno);
SELECT AVG(sal) INTO v_avgsal
emp WHEREからdeptno = v_deptno;
IF v_sal > v_avgsal THEN
DBMS_OUTPUT.PUT_LINE (「従業員」の給与は
| | 'の部門平均 | | v_avgsal);
ELSE
DBMS_OUTPUT.PUT_LINE (「従業員」の給与は
| | 'の部門平均 | | v_avgsal);
エンドIF;
エンド;
説明
- p_empnoは、% TYPEを使用して明示的に定義される仮パラメーターの例です。
- v_avgsalは、% TYPEを使用してテーブル列ではなく別の変数を参照する方法を示しています。
サンプル結果:
EXEC emp_sal_query(7698);
従業員# : 7698
名前: ブレイク
仕事: マネージャー
レンタル日: 5月1日-81 00:00:00
給与: 2850.00
Dept # : 30
従業員の給与は部門平均の1566.67
を上回っています