web-dev-qa-db-ja.com

Oracle 11g:C / C ++の関数またはプロシージャ

Oracleのトリガーによって呼び出される関数を、cまたはc ++で作成したいと考えています。 PostgreSQLのようなもの: Cの監査トリガー

または、いずれにせよ、これはサポートされていますが、Pythonなどの他の言語ではサポートされていますか?

ありがとう!

2
Diego Vargas

Oracleデータベースは、Javaおよび外部C呼び出しをサポートします。これらは、Pythonなどの他の言語で記述されたプログラムを呼び出すラッパーとして使用できます。

外部プロシージャの公開

Oracle Databaseは、JavaクラスメソッドまたはC外部プロシージャの名前、パラメータタイプ、および戻り値のタイプを対応するSQLにマッピングするコール仕様を通じて公開された外部プロシージャのみを使用できます。

サンプルプログラムを作成します。

$ cat /home/Oracle/1.c
char* myfunc()
{
   return "Hello World!";
}

$ gcc -shared -o /home/Oracle/1.so -fPIC /home/Oracle/1.c

データベースで、ライブラリとそれを使用する関数を作成します。

create or replace library lib_myfunc is '/home/Oracle/1.so';
/

create or replace function myfunc
return varchar2 as external
name "myfunc"
library lib_myfunc
language c;
/

$Oracle_HOME/hs/admin/extproc.oraでこのライブラリの使用を有効にします:

SET EXTPROC_DLLS=/home/Oracle/1.so

次に、最後に次のように使用します。

SQL> select myfunc from dual;

MYFUNC
------------
Hello World!

これについての詳細:

複数のプログラミング言語を使用したアプリケーションの開発

2
Balazs Papp