質問

私は戦闘に使用され"。ある人は少ないという悪くして利用するべきではありません。しDB2、iシリーズです。

以下の私の引数保存の手続きに私の会社です。

役に立ちましたか?

解決

OKい出の保管procs.

ご使用していくリファクタリングデータベースのようにして使用でき、依存関係データベースに保存されているかに及ぼす影響による変更をもってSQLサーバーがとにかく、なに話その他のdatbases).

第二に、内容に変更がある場合、クエリー、これは簡単になるに展開している。

もや性能を調整しておきな焼成を願います。

ていれば複雑なロジックして保存一部の性能を有しない送信のすべてのネットワークのデータベースサーバーです。ない場合のように聞こえるかもしれないが大きな利得し、その複雑なクエリが数千回の日で追加できます。

セキュリティも非常に重要です。を使用しない場合は、店の手続きにより、設定により権利のテーブルやビューです。このデータベース 内部 詐欺について。あのクエリパラメータ化されたリスクの低減にsqlインジェクションがるだけではない脅威に必要なものガード。場合は個人情報や金融データを使用しない保存procs(ともののない動的SQl)を制限ユーザーだけができるというものを通じてprocs、そのシステムに極端な危機から社内の従業員が盗データバイパス内部統制を盗んです。について内部統制、会計基準なぜこれが問題です。

ORMsものが書けなんとも悪いのSQLコードの場合には、あらゆるクエリが複雑になります。さらに、人々の利用開始のではなく、格納されprocsしていることを見い者保procsて貧しい理解に乗せるにはどうすればよいかのデータをデータベースや多くの誤ったデータです。を用いORMはすでに理解SQLできるかを判定するのに書き換えのautogeneratedコードをもとにしようとしています。も多くのユーザーは少ないスキルを複コードになったのでもあります。

って既に格納されprocsのためにお申し込みくて完全にはバグを混入しわけだったのを新しく生成します。

他のヒント

あなたはこれが好きでするつもりはない、と私はおそらく忘却の彼方にdownvotedを取得するつもりですが、私はあなたのとびの残りの部分としています。

は多くの利点(セキュリティ、パフォーマンス、など)が、パラメータ化クエリとより良いクエリの最適化とを提供するために使用ストアドプロシージャ、ストアドプロシージャが本当にちょうどあなたのアプリケーションにオーバーヘッドの別の層を追加し、あなたが更新する必要が別の場所を与える/変更コードます。

私は編集コードを必要とするとき、私は一つの場所に行くと、そこに私の変更を行うことができるように、単一のスポットにすべてのものを維持することを好むます。

あなたはストアドPrcoeduresから離れて移動するための引数の詳細をしたい場合は、このCodingHorrorの記事をチェックアウトします:

とにかくストアドプロシージャが必要です。

コーディングホラー?

...と私はちょうど記事は、私はデータベースが、それはその後、やったよりも、これは今日でも多くの真鳴らすだろうことを意味する、それ以来よくなっていることを信じている2004年からのものであることに気づいています。

JDBC経由のすべてを行うには、本質的に、あなたがあなたとデータベース間のネットワーク層を挿入していることを意味します。すべてのすべてで、それは、データがより多くの「リモート」で、低速のあなたに来ることを意味します。ストアドプロシージャは、データベース内のデータを直接操作することができ、および速度の結果の違いは、あなたを驚かせることがあります。

してくださいあなたは場合には、それはprogrammingsのスキルの問題があり、Javaのを含む任意のIBM iの言語でストアドプロシージャを記述できることに注意してください。また、あなただけではなく、いくつかのデータベースの内部、FULLマシンへのアクセス権を持っています。 の私のの意見では - - 適用されません。

。ここでAS / 400は、単に他のデータベースからの経験があること、他のデータベース製品からそれほど大幅に異なっています

彼らは私の知っているAS / 400プログラミングのスキルの最大濃度を持っているように、私はミッドレンジのメーリングリストをお勧めします。

これは、これらのマーマイト課題の一つです。あなたは主にデータベースプログラマであれば、あなたは、ストアドプロシージャが広く使用されなければならないと思います。 Javaのを言うか、Aネットコーダ - - あなたがアプリケーションプログラマであればチャンスはあなたが、彼らは完全に回避されるべきであると言うだろうしています。

これはアプリケーションプログラマは、独自のSQL文を書きたい満たしていないこと。いいえ、これらの日彼らは、複雑なORMサービスの背後に抽象すべてにしたい傾向があります。これらは、ストアド・プロシージャよりも理解していない簡単ですが、彼らは以下のコンテキストの切り替えが必要なので、同じIDE内で利用可能です。

ストアドプロシージャの賛成で二つの大きなものがあります。最初のPL / SQLを知っている人は、そうであるOracleデータベース(T-SQL&SQL Serverの、など)に精通して、およびそのプラットフォームのを活用するプログラムとして定義され、そのデータベース(のためのより良いプログラムを書く傾向にあるということです特長とそうでない人よりも)その機能に装着されています。

2つ目は、そのデータが持続です。アプリケーション開発者は、「データベースの独立性」の話が好きですが、本当に重要なのは、のアプリケーションに依存しないのです。フロントエンドは行ったり来たりするが、データ・モデルは、永遠に耐えます。過去10年間でJavaアプリケーションをして、アプレット、サーブレット、JSP、タイルや顔のように書かれているアドオンのJavaScript、Groovyの、AJAXとJSONで、手巻きJDBC、EJB(v1,2を介してデータベースに接続し、私はいくつかを見逃している場合3)は、TopLink、HibernateとiBatisのは...私を許して。そのUIであるストアドプロシージャの層の上の皮膚アプリケーションは、ビジネスロジックは毎回再書かなければならないアプリケーションよりも最新かつ最高にアップグレードするのが容易です。そして、彼らはあまりにもパフォーマンスが向上します。

しかし、おそらく離れて死ぬしようとしている相互作用を直接データベースとの長期アプリケーションインチすべては、サービス・バスに話をするつもりされ、それがデータを取得する場所を決定します。もちろん、データベースは、ストアドプロシージャのうまく設計されたAPIを介して公開されたお店は、簡単に自分のORMロジックのうち、すべてのものを抽出する必要があるとしているそれらの場所よりも、この勇敢な新しい世界に移動するかもしれません。

あなたがアプリケーションの階層セットを持っている場合、

これは便利です。例えば、(ストアドプロシージャをすることが起こる)アトミック操作を提供するウェブサービスとシングルコアDBとESBまたはそれらのWSを消費するアプリケーションのセット。 他の人が示唆したように、単一のアプリ/シングルデシベルの場合は、アイデアが一つの場所にコードを維持することです。

しかしまあ、それは私だけです。

私は最近、私のために本当に悪い光の中でストアドプロシージャの使用を入れているストアドプロシージャを多用し作られたいくつかのプロジェクトに遭遇した長時間のJava開発者です。

本当にそれが問題になっているプロジェクトや特定のストアドプロシージャを達成しようとしているかに依存しているため、

のことを言って、私は、ストアドプロシージャは、システム・デザイン・オプションとして悪いことを毛布文を作ることに消極的だ。

私の好みは、単純なCRUD操作のためのストアドプロシージャのいずれかの種類を避けるためである(それは、ストアドプロシージャは、これらの操作を扱う持っているいくつかのばかばかしいに聞こえるかもしれないが、私はこれをやっていたいくつかのシステムに遭遇しました) - 結果としてアップこの端を私が観察したものからこれらのプロシージャ・コールを管理するために、Java側に書かれた(およびテストされ、維持される)ことがあるコードの多くインチそれを維持するために必要なコードの量を減少させる傾向があるよりも、他の理由のためかどうかは...より良いだけで操作のこれらの種類を処理するために休止状態(またはいくつかの他のORMライブラリ)を使用するのです。また、リファクタリングしようとしたときに問題が発生したり、システムに重大な変更を加える、あなただけのクラス/テーブルの変更に懸念に自分自身を持っていないとして、しかし、ストアドプロシージャだけでなく、ハンドルCRUDオプスことができます。あなたは、開発者はデータベースへの変更自分自身を作ることができない、あるいはシステムの2つの部分の間の変更を調整するための場所でいくつかの正式なプロセスがあるような状況にいる場合、これはさらに悪化することができます。

一方、Javaコード(基本的に、あなただけのいくつかの引数を使って1への呼び出しをオフに解雇)との限られた相互作用を必要とする手順を格納した、半自律的な方法で実行するには、いずれかのひどいものではありません。私は、ストアドプロシージャを使用して機能を処理するためのJavaコードの束を書くよりもはるかに良いルートだった、いくつかの状況(特に、我々は移行またはシステムにデータをインポートされた)に遭遇しました。

私は、おそらくそれは、Javaや動作を処理する方が簡単ですかどうかを判断するために、ケースバイケースであなたは、システム内の各店舗の手順が現在どのような状況にあるかを調べるべきであるということでしょう、ここで本当の答えを推測し、それらを評価しますデータベース。いくつかは非常によく、一部ではないが、(いずれかのORMライブラリ、または実際の手で書かれたコードで)、Javaでよりよく動作する可能性があります。いずれの場合も、目標は常に確認システムが理解できるようにするためにであるべきで、簡単に、誰のために維持するだけでなく、ストアドプロシージャは、それ自体の良し悪しがあるかどうか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top