MLEのJavaScriptでのVECTORデータ型のサポート

Oracle Multilingual Engine (MLE)では、JavaScript TypedArraysとSQLベクトルの間のINT8FLOAT32およびFLOAT64形式の変換がサポートされています。JavaScriptデータ型とVECTORデータ型間のデータ交換は、MLE JavaScript SQLドライバ、MLEコール仕様およびMLE JavaScriptバインディングによってサポートされます。

VECTORデータ型は、INOUTおよびIN OUTバインド引数、および戻り型として指定できます。MLEコール仕様のSIGNATURE句では、次のJavaScript型がサポートされます。

  • Float32Array
  • Float64Array
  • Int8Array

表A-5 VECTORデータ型からJavaScript型へのマッピング

SQL型 JavaScript型
VECTOR(*, float32) Float32Array (TypedArray)
VECTOR(*, float64) Float64Array (TypedArray)
VECTOR(*, int8) Int8Array (TypedArray)
VECTOR(*) Float64Array脚注1(TypedArray)

脚注1 ベクトル形式が指定されていない場合、デフォルトでFloat64Arrayが使用されます。

表A-6 JavaScript型からVECTORデータ型へのマッピング

JavaScript型 SQL型
Float32Array VECTOR(*, float32)
Float64Array VECTOR(*, float64)
Int8Array VECTOR(*, int8)
Array VECTOR(*, float64)

関連項目:

例A-1 MLEでのVECTORデータ型の使用

この例では、引数で使用されるVECTORデータ型と、MLEコール仕様の戻り型のサポートを示します。

SET SERVEROUTPUT ON;
CREATE OR REPLACE MLE MODULE vec_mod
LANGUAGE JAVASCRIPT AS

/**
 * Add two vectors
 * @param v1 the first vector
 * @param v2 the second vector
 * @returns the resulting vector after adding v1 and v2
 */
export function addVectors(v1, v2){
  return v1.map((element, index) => element + v2[index]);
}

/**
 * Subtract two vectors
 * @param v1 the first vector
 * @param v2 the second vector
 * @returns the resulting vector after subtracting v2 from v1
 */
export function subtractVectors(v1, v2){
  return v1.map((element, index) => element - v2[index]);
}
/

CREATE OR REPLACE PACKAGE mle_vec_pkg AS

  FUNCTION addVectors(
    input_vector1 IN VECTOR,
    input_vector2 IN VECTOR
  )
  RETURN VECTOR
    AS MLE MODULE vec_mod
    SIGNATURE 'addVectors';

  FUNCTION subtractVectors(
    input_vector1 IN VECTOR,
    input_vector2 IN VECTOR
  )
  RETURN VECTOR
    AS MLE MODULE vec_mod
    SIGNATURE 'subtractVectors';

END mle_vec_pkg;
/
SELECT mle_vec_pkg.addVectors(
  VECTOR('[1, 2]'),
  VECTOR('[3, 4]')
) AS result;

結果:

RESULT
---------------------------------------------
[4.0E+000,6.0E+000]
SELECT mle_vec_pkg.subtractVectors(
  VECTOR('[3, 4]'),
  VECTOR('[1, 2]')
) AS result;

結果:

RESULT
---------------------------------------------
[2.0E+000,2.0E+000]