DEFINE_COLUMN¶
DEFINE_COLUMN
プロシージャは、カーソルで返されて取得される SELECT
リストの列または式を定義します。
DEFINE_COLUMN(<c> INTEGER, <position> INTEGER, <column> { BLOB |
CLOB | DATE | FLOAT | INTEGER | NUMBER | TIMESTAMP | VARCHAR2 }
[, <column_size> INTEGER ])
Parameters
c
SELECT
コマンドに関連付けられたカーソルのカーソルID。
position
定義されている
SELECT
リスト内の列または式の位置。
column
SELECT
リストのposition
の位置にある列または式と同じデータ型の変数。
column_size
返されるデータの最大長。
column
がVARCHAR2
の場合のみ、column_size
を指定する必要があります。column_size
を超える返されるデータはcolumn_size
文字に切り捨てられます。
Examples
次に、 emp
テーブルの empno, ename, hiredate, sal
列と comm
列が DEFINE_COLUMN
手順でどのように定義されるかを示します。
DECLARE
curid INTEGER;
v_empno NUMBER(4);
v_ename VARCHAR2(10);
v_hiredate DATE;
v_sal NUMBER(7,2);
v_comm NUMBER(7,2);
v_sql VARCHAR2(50) := 'SELECT empno, ename, hiredate, sal, ' ||
'comm FROM emp';
v_status INTEGER;
BEGIN
curid := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(curid,v_sql,DBMS_SQL.native);
DBMS_SQL.DEFINE_COLUMN(curid,1,v_empno);
DBMS_SQL.DEFINE_COLUMN(curid,2,v_ename,10);
DBMS_SQL.DEFINE_COLUMN(curid,3,v_hiredate);
DBMS_SQL.DEFINE_COLUMN(curid,4,v_sal);
DBMS_SQL.DEFINE_COLUMN(curid,5,v_comm);
.
.
.
END;
以下は、まったく同じ結果を生成する前の例の代替を示しています。データ型の長さは関係ないことに注意してください。 v_num
が NUMBER(1)
として定義されていても、 empno, sal
および comm
列はそれぞれ NUMBER(4)
および NUMBER(7,2)
に相当するデータを返します。「12」手順の宣言は、適切な最大サイズです。 ename
列は、「11」に対して宣言された「10」というデータ型宣言ではなく、 DEFINE_COLUMN
コールの length
パラメータで定義された最大10文字のデータを返します。返されるデータの実際のサイズは、「12」手順によって決まります。
DECLARE
curid INTEGER;
v_num NUMBER(1);
v_varchar VARCHAR2(1);
v_date DATE;
v_sql VARCHAR2(50) := 'SELECT empno, ename, hiredate, sal, ' ||
'comm FROM emp';
v_status INTEGER;
BEGIN
curid := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(curid,v_sql,DBMS_SQL.native);
DBMS_SQL.DEFINE_COLUMN(curid,1,v_num);
DBMS_SQL.DEFINE_COLUMN(curid,2,v_varchar,10);
DBMS_SQL.DEFINE_COLUMN(curid,3,v_date);
DBMS_SQL.DEFINE_COLUMN(curid,4,v_num);
DBMS_SQL.DEFINE_COLUMN(curid,5,v_num);
.
.
.
END;