タグ付けされた質問 「trigger」

データベースイベントに応答して自動的に実行される手続き型コード。

1
フィールド名のみが指定されたNEWまたはOLDフィールドにアクセスする方法は?
検証トリガーを書いています。トリガーは、配列の合計が別のフィールドと等しいことを検証する必要があります。この検証には多くのインスタンスがあるため、単一のプロシージャを記述して、チェックするフィールドのセットがそれぞれ異なる複数のトリガーを作成します。 たとえば、次のスキーマがあります。 CREATE TABLE daily_reports( start_on date , show_id uuid , primary key(start_on, show_id) -- _graph are hourly values, while _count is total for the report , impressions_count bigint not null , impressions_graph bigint[] not null -- interactions_count, interactions_graph -- twitter_interactions_count, twitter_interactions_graph ); 検証では、それを確認する必要がありますimpressions_count = sum(impressions_graph)。 NEWplpgsql内からフィールドに動的にアクセスする方法がわからないので、行き詰まっています。 CREATE FUNCTION validate_sum_of_array_equals_other() …

3
MySQLがグローバルルーチン(ストアドプロシージャや関数)を作成する可能性
どういうわけかグローバルに利用可能なルーチンを定義することは可能ですか?すべてのルーチンはデータベースのスコープ内で作成する必要があるようです。 (事前に発行せずにuse dbname)コンソールからルーチンを作成しようとすると、エラーが発生します。 ERROR 1046 (3D000): No database selected 同一のデータベースが大量にあり(データは異なります)、いくつかのテーブル名に対していくつかのトリガーを作成することが目標です。ただし、実行するルーチンは1つだけにしたいので、データベースごとにこれらのルーチンを作成する必要はありません(これらは同じなので、ルーチンは各データベースで同じように動作します)。

3
共有ログインを使用しているときに、監査テーブルで削除アクションを実行しているユーザーを知る方法は?
背景情報: アプリの一連のデータテーブルに対する更新と削除を追跡するために、監査テーブルのコレクションを作成しています。 監査レコードはトリガーを介して作成されます。 アプリのデータベースのDMLは通常、サービスがデータベースにアクセスするために使用するログインから取得されます。このためSYSTEM_USER、トリガーで呼び出されたときの結果は常に同じになると思います。 私のアプリは現在ユーザーデータを保存していませんが、UserIdDMLが実行されるたびに文字列が与えられます(ストアドプロシージャでのみ行われます)。 私が遭遇した問題は、ユーザーがレコードを削除するときに、誰がそれをしたのか知りたいということです。同じログインによって行われるため、すべてのアクションがサービスによって行われたことを確認したくありません。どのユーザーがそれを実行したかを確認したいと思います。ModifiedBy更新の送信で更新される列があるため、これは更新の問題ではありませんUserId。 問題はSYSTEM_USER、削除が実行されたときに、ユーザー情報をトリガーに設定する方法、またはトリガーに取得する方法はありますか? 私が現在持っている「最高の」アイデアは、それが良いアイデアかどうかはまだわかりませんが、サービスで、現在のものUserIdがデータベースとしてユーザーに存在するかどうかを確認し、そうでない場合はユーザーを作成することです彼らのためのオブジェクト。次に、でストアドプロシージャを実行しEXECUTE AS User = @UserIdます。次に、ストアドプロシージャでDMLが実行され、トリガーが起動すると、SYSTEM_USERからユーザーを返す必要がありEXECUTE ASます。

1
ON SCHEMAトリガーとON DATABASEトリガーの違いは何ですか?
具体的なスキーマイベント(ON SCOTT.SCHEMA)またはすべてのスキーマ(ON SCHEMA)でデータベーストリガーを作成できます。ただし、データベーストリガーを作成するときにON DATABASEを使用することもできます。それらの違いは何ですか?レガシーなものですか?ON DATABASEは、AFTER STARTUPまたはAFTER STARTUPを使用する場合に使用する必要があります。これは、データベースのみに確実に関連するためですが、ON SCHEMAを使用して実行されるものと同じものがON DATABASEを使用して実行される場合があるため、違いは何ですか?それに関するOracleのドキュメントで参照を見つけることができません。
8 oracle  trigger 

3
トリガーを使用して別のテーブルを更新するのは賢明ですか?
別のデータベースからObject統合サービス(必要に応じて変更できます)からデータを入力したテーブルがあります。特定の時点で、特定の整数値があるObjectObjectGroup (ObjectId, ObjectGroupId)場合に必要な別のテーブルに手動で投稿を追加する必要がありObject.ObjectTypeます。統合サービスはそのような更新を処理しないので、疑似コードでは次のようなトリガーをObjectテーブルに追加することを考えています。 if Object.ObjectType = 10 begin if Object.ObjectNumber like '<string pattern>' begin insert into ObjectObjectGroup values... end end これは賢明な設定ですか、それともパフォーマンスの点でより良い方法がありますか?

3
MySQLトリガーまたはトランザクションを使用していますか?
MySQLトリガーまたはWebサイトでのトランザクションの使用について、ご意見をお聞かせください。 実際、私はpayment-で履歴テーブルを持っていますUserId | OperationId | Comment | Credits | Sign (debit or credit)。したがって、各支払い操作がこのテーブルに挿入されます。 ただし、ユーザーがアクションを実行するたびに、ユーザーの合計クレジット額を計算するのに時間がかかります。そのため、各ユーザーの合計クレジット額をユーザーprofileテーブルに保持することをお勧めします。 ここに問題があります。profileテーブルの合計クレジット額がpayment履歴テーブルの操作と常に同期していることを確認するにはどうすればよいですか? 私は2つの方法を使用すると思いました: MySQLトリガーまたは ソースコードでコーディングされたトランザクション どちらがより信頼できますか?大規模なデータベース(100.000ユーザー以上)がある場合はどうなりますか? これを行うための提案はありますか? BD MySQLエンジンはInnoDBです。

3
Accessのデータ変更をテーブルレベルでログに記録する方法
非営利組織のAccessデータベースをサポートしています。データが不思議に変化しているという問題があり、これがコンピューターの知識がほとんどないユーザーが原因なのか、私のバックグラウンド処理が原因なのかについて、親しみやすい議論が交わされました。 これらの条件について、UIレベルでいくつかのチェックを追加しましたが、特定のフィールドが変更されたときにログを記録するために、データベーステーブルレベルでいくつかのチェックを行いたいと思います。このようにして、変更がユーザーによって開始されたのか、バックグラウンドで実行されている更新クエリから開始されたのかを知ることができます。通常はon updateトリガーを使用しますが、私の知る限り、Accessはトリガーをサポートしていません。Accessで利用できる他のロギングまたはトリガーのような機能はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.