PL/SQLにおける関数とプロシージャの違い

可能重複:
   PLの関数と手続きの違いは何ですか?/SQL?

関数は常に値を返しますが、プロシージャでも 'out'を使用するとプロシージャも値を返すので、いつ関数を書くべきか、プロシージャを書くべきか教えてください。プロシージャや関数を使用するかどうかを決定する基準は何ですか?

1
追加された 著者 Sathya,

1 答え

関数は主に何らかの種類の計算を行い、常にreturn文を使用して値を返し、select文で使用できます。プロシージャはビジネスロジックを実装するために使用され、outパラメータを使用して1つまたは複数の値を返すことができます。関数内でDMLを行うべきではありません。

5
追加された
関数でDMLを使用する場合は、ORA-14551を取得したselect文ではDMLを使用できません。
追加された 著者 DCookie,
この文を無視してはならず、文の意味/含意を理解しようとしてください。プロシージャは値を返しません。プロシージャーのOUTおよびIN OUTパラメーターには、値を入れることができます。だからx:= function_x(); OKですが、x:= procedure_x(a、b、c); NOTOKです。
追加された 著者 Robert Merkwürdigeliebe,
変数xで計算を行いたい場合は、パラメータxで関数を作成し、関数で計算を行い、新しい値を返すか、IN OUTパラメータxで手続きを作成し、手続き中でxの値を変更します。だからそれを呼び出す:x = function_y(x); OR procedure_y(x);
追加された 著者 Robert Merkwürdigeliebe,
person:アカウントは1:nの関係です
追加された 著者 Robert Merkwürdigeliebe,
ありがとうobert&DCookie ...だから、私はいつも 'プロシージャは値を返さない'と言うステートメントを無視する必要があります。なぜなら、これは一般的に誰もがABTの差異ベット関数とプロシージャwrtオラクル... ..dのみの違いは、関数がselect文で使用できないことです(f DMlは関数内にあります)...答えに感謝します...私の質問は、simi;このフォーラムで...
追加された 著者 ratsy,
はい、あなたは上記の答えでこれを明確にすることは絶対に正しいです。しかし、出力がプロシージャ内またはその外の変数に渡される方法でコードを書くことはできますか?そのようにして、私たちがfunctnかprocを選ぶかどうかは問題ありませんか?もう一度おねがいして申し訳ありません....ありがとう..
追加された 著者 ratsy,
クリスタルクリアな答え、おかげでたくさんのことがわかりました。私は明確にしたいことを... ..ロバートに感謝しています。もしあなたがこの疑問からもう一度疑問を抱くなら、私はこのフォーラムに新しいことができます。ここに私たちのアカウントに?または私たちはそれを行うために特定のポイントが必要です..thnxx再び
追加された 著者 ratsy,
ああ、私は他のフォーラムでyahooの回答でやっているように誰かをここに友達として追加できるのかどうかを知っているので、もし必要ならば、直接彼らに緊急の質問をすることができますか?私の悪い英語を赦してください。ウルの脳をもっと食べてはいけません。:)ありがとうございます。
追加された 著者 ratsy,