12.7.2.9 pyqScriptCreateプロシージャ(Autonomous Database)

このトピックでは、Oracle Autonomous DatabaseのpyqScriptCreateプロシージャについて説明します。pyqScriptCreateプロシージャを使用してユーザー定義Python関数を作成し、OML4Pyスクリプト・リポジトリに追加します。

構文

sys.pyqScriptCreate (
    V_NAME          VARCHAR2    IN
    V_SCRIPT        CLOB        IN
    V_GLOBAL        BOOLEAN     IN     DEFAULT
    V_OVERWRITE     BOOLEAN     IN     DEFAULT)
パラメータ 説明
V_NAME OML4Pyスクリプト・リポジトリ内のユーザー定義Python関数の名前。
V_SCRIPT Python関数の定義。
V_GLOBAL TRUEは、ユーザー定義Python関数がパブリックであることを指定します。FALSEは、ユーザー定義Python関数がプライベートであることを指定します。
V_OVERWRITE スクリプト・リポジトリにV_NAMEと同じ名前のユーザー定義Python関数がすでにある場合、TRUEではそのユーザー定義Python関数の内容がV_SCRIPTに置き換えられ、FALSEでは置き換えられません。

例12-37 pyqScriptCreateプロシージャの使用

この例では、OML4Pyスクリプト・リポジトリにpyqFun2という名前のプライベート・ユーザー定義Python関数を作成します。

BEGIN
  sys.pyqScriptCreate('pyqFun2',
    'def return_frame():
       import numpy as np
       import pickle
       z = np.array([y for y in zip([str(x)+"demo" for x in range(10)],
       [float(x)/10 for x in range(10)],
       [x for x in range(10)],
       [bool(x%2) for x in range(10)],
       [pickle.dumps(x) for x in range(10)],
       ["test"+str(x**2) for x in range(10)])],
       dtype=[("a", "U10"), ("b", "f8"), ("c", "i4"), ("d", "?"), 
       ("e", "S20"), ("f", "O")])
       return z');
END;
/

この例では、スクリプト・リポジトリにpyqFun2という名前のグローバル・ユーザー定義Python関数を作成し、同じ名前の既存のユーザー定義Python関数を上書きします。

BEGIN
  sys.pyqScriptCreate('pyqFun2',
    'def return_frame():
       import numpy as np
       import pickle
       z = np.array([y for y in zip([str(x)+"demo" for x in range(10)],
       [float(x)/10 for x in range(10)],
       [x for x in range(10)],
       [bool(x%2) for x in range(10)],
       [pickle.dumps(x) for x in range(10)],
       ["test"+str(x**2) for x in range(10)])],
       dtype=[("a", "U10"), ("b", "f8"), ("c", "i4"), ("d", "?"), 
       ("e", "S20"), ("f", "O")])
       return z',
       TRUE,  -- Make the user-defined Python function global.
       TRUE); -- Overwrite any global user-defined Python function 
              -- with the same name.
END;
/

この例では、スクリプト・リポジトリにcreate_iris_tableという名前のプライベート・ユーザー定義Python関数を作成します。

BEGIN
  sys.pyqScriptCreate('create_iris_table',
    'def create_iris_table():
       from sklearn.datasets import load_iris
       import pandas as pd
       iris = load_iris()
       x = pd.DataFrame(iris.data, columns = ["Sepal_Length",\
                        "Sepal_Width","Petal_Length","Petal_Width"])
       y = pd.DataFrame(list(map(lambda x: {0:"setosa", 1: "versicolor",\
                                 2: "virginica"}[x], iris.target)),\
                        columns = ["Species"])
       return pd.concat([y, x], axis=1)');
END;
/

現在のユーザーが所有するユーザー定義Python関数を表示します。

SELECT * from USER_PYQ_SCRIPTS;

NAME               SCRIPT
-----------------  ---------------------------------------------------------------------
create_iris_table  def create_iris_table():       from sklearn.datasets import load_iris ...
pyqFun2            def return_frame():       import numpy as np       import pickle      ...

現在のユーザーが使用可能なユーザー定義Python関数を表示します。

SELECT * from ALL_PYQ_SCRIPTS;

OWNER     NAME               SCRIPT
--------   -----------------  --------------------------------------------------------------------
OML_USER   create_iris_table  "def create_iris_table():  from sklearn.datasets import load_iris ...
OML_USER   pyqFun2            "def return_frame():  import numpy as np       import pickle      ...
PYQSYS     pyqFun2            "def return_frame():  import numpy as np       import pickle      ...