-3

関数が行うすべてのことは、データベース内のプロシージャによっても達成できるため、データベース内の関数の必要性は何ですか。

4

2 に答える 2

4

Oracle では、それらは非常に似ています。主な違いは、関数は結果を返しますが、プロシージャは返さないことです。(両方で使用できる出力パラメータと混同しないでください...)

この違いにより、次のような SQL ステートメント内で関数を使用できるようになります。

select user_name, myFunction( some_attribute ) from ...

また

select ... where fn2(col1)=something

ある種の変換と考えることができます。

もちろん、SQL ステートメント内で効率的に使用するには、出力の各行または検査される各行に対して何度も実行できるように、高速である必要があります。(および/または行数が多すぎないことを確認してください)。

また、最近のバージョンでは、return をリアルタイムの dbms_output (パイプ行の検索) として使用できます。

于 2013-01-19T19:24:16.057 に答える
1

関数ベースのインデックスで関数を使用することもできます。また、これらのインデックスは一意のインデックスにすることもできます。関数ベースの一意のインデックスを使用すると、高度な一意の制約を構築できます。

create unique index UK_MYINDEX
 on TBL_MYTABLE (case when IS_ACTUAL(MY_COLUMN_2) then MY_COLUMN_1 end);

この例では、一意の MY_COLUMN_1 制約を実際のレコードのみに適用するために、一意のインデックスで IS_ACTUAL 関数を使用しています。

于 2013-01-19T20:19:00.793 に答える