rqEval
関数は、EXP_NAM
パラメータで指定されているスクリプト内のR関数を実行します。PAR_CUR
パラメータを使用して、引数をR関数に渡すことができます。
rqEval
関数は、データベースからのデータを自動的には受信しません。R関数は、使用するデータを生成するか、Oracle Database、他のデータベース、フラット・ファイルなどのデータソースからデータを明示的に取得します。
R関数は、データベース内にSQL表として表示されるR data.frame
オブジェクトを返します。OUT_QRY
パラメータを使用して、返される値の形式を定義します。
構文
rqEval
(
PAR_CUR REF CURSOR IN
OUT_QRY VARCHAR2 IN)
EXP_NAM VARCHAR2 IN)
パラメータ
パラメータ | 説明 |
---|---|
|
|
|
次のうちの1つ。
|
|
Oracle R EnterpriseのRスクリプト・リポジトリ内のスクリプトの名前。 |
戻り値
関数rqEval
は、OUT_QRY
パラメータ値で指定されている構造を持つ表を返します。
例
例A-2 rqEvalの使用方法
この例では、スクリプトmyRandomRedDots2
を作成します。rqEval
の最初のパラメータの値は、関数myRandomRedDots2
に引数を渡さないことを指定するNULL
です。2番目のパラメータの値は、rqEval
により返されたdata.frame
の列名およびデータ型を記述するSQL文を指定する文字列です。3番目のパラメータの値は、Oracle R EnterpriseのRスクリプト・リポジトリ内のスクリプトの名前です。
-- Create a script named myRandomRedDots2 and add it to the R script repository. -- Specify that the script is private and to overwrite a script with the same name. BEGIN sys.rqScriptCreate('myRandomRedDots2', 'function(divisor = 100, numDots = 100) { id <- 1:10 plot(1:numDots, rnorm(numDots), pch = 21, bg = "red", cex = 2 ) data.frame(id = id, val = id / divisor)}', v_global => FALSE, v_overwrite => TRUE); END; / SELECT * FROM table(rqEval(NULL, 'SELECT 1 id, 1 val FROM dual', 'myRandomRedDots2'));
Oracle SQL DeveloperでのSELECT
文の結果は次のようになります。
ID VAL ---------- ---------- 1 .01 2 .02 3 .03 4 .04 5 .05 6 .06 7 .07 8 .08 9 .09 10 .1 10 rows selected
例A-3 rqEvalにより呼び出されたR関数に引数を渡す
この例では、rqEval
の最初のパラメータとしてカーソルを指定することにより、R関数に引数を渡します。カーソルは、単一行のスカラー値の中に複数の引数を指定します。
SELECT * FROM table(rqEval(cursor(SELECT 50 "divisor", 500 "numDots" FROM dual), 'SELECT 1 id, 1 val FROM dual', 'myRandomRedDots2'));
Oracle SQL DeveloperでのSELECT
文の結果は次のようになります。
ID VAL ---------- ---------- 1 .02 2 .04 3 .06 4 .08 5 .1 6 .12 7 .14 8 .16 9 .18 10 .2 10 rows selected
例A-4 出力表定義としてのPNGの指定
この例では、PNG_Example
というスクリプトを作成し、Oracle R EnterpriseのRスクリプト・リポジトリに格納します。rqEval
を呼び出すと、'PNG'
のOUT_QRY
値が指定されます。
BEGIN sys.rqScriptDrop('PNG_Example'); sys.rqScriptCreate('PNG_Example', 'function(){ dat <- data.frame(y = log(1:100), x = 1:100) plot(lm(y ~ x, dat)) }'); END; / SELECT * FROM table(rqEval(NULL,'PNG','PNG_Example'));
Oracle SQL DeveloperでのSELECT
文の結果は次のようになります。
NAME ID IMAGE ------ ---- ------ 1 (BLOB) 2 (BLOB) 3 (BLOB) 4 (BLOB)