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

返されるデータの最大長。 columnVARCHAR2 の場合のみ、 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_numNUMBER(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;