問題タブ [triggers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - Oracle 関数の同時実行
私は現在、挿入の一部として使用されるファンキーな英数字コードを生成するカスタム定義関数を Oracle 10g で実行する INSERT TRIGGER を持っています。
関数 (またはトリガー) がスレッドセーフであることを確認して、2 人のユーザーが同時にトリガーをアクティブにした場合、トリガー内で使用される関数が両方のユーザーに対して同じコードを返さないようにする必要があります。
トリガーのフローは次のとおりです。
始める
- ビジネス ロジックに基づいて続行する必要があるかどうかを判断する
- カスタム関数を実行して新しいコードを取得する
- 返されたコードを別のテーブルへの挿入として使用する
終わり
主な問題は、ステップ 2 の実行中に別のスレッドがトリガーを起動し、これもステップ 2 に入り、最初のスレッドと同じコードを返す場合です。(これが非常に厳しい状況であることは理解していますが、対処する必要があります)。
これを行う主な方法として、次の 2 つを考えました。
私がこれまでに考えた最善の方法は、トリガーの開始時にトリガーで使用されるテーブルを「排他モード」でロックし、ロックの NOWAIT 属性を指定しないことです。このようにして、その後のトリガーのアクティブ化は、ロックが使用可能になるのを一種の「停止して待機」し、他のスレッドがトリガーで終了するのを待ちます。
テーブルの読み取りを拒否するテーブルをロックしたいのですが、Oracleでこれを行う方法を見つけたようです。
私のアイデアは理想的ではありませんが、うまくいくはずですが、これについてより良いアイデアを持っている人から聞いてみたいです!
与えられた助けに感謝します。
乾杯、マーク
oracle - ORA-04091: テーブル [blah] は変更中です。トリガー/関数はそれを認識できない可能性があります
最近、大規模で複雑なアプリケーションの作業を開始しましたが、次のエラーが原因でバグが割り当てられました。
問題のトリガーは次のようになります
テーブルには、主キー " t1_pk
"、"予定イベント ID"
t1_appnt_evnt_id
、および別の列 " t1_prnt_t1_pk
" があり、別の行の を含む場合と含まない場合がありますt1_pk
。
トリガーは、この行が別の行を参照している場合、この行が別の行への参照を参照しているのと同じものt1_appnt_evnt_id
を参照していないことを確認しようとしているようです。
DBA からのバグ レポートのコメントには、「トリガーを削除し、コードでチェックを実行する」と書かれていますが、残念ながら、Hibernate の上に階層化された独自のコード生成フレームワークがあるため、実際にどこにあるのかさえわかりません。書き出されるので、このトリガーを機能させる方法があることを願っています。ある?
wpf - WPF - グリッドのマウスオーバーのトリガーを作成するには?
Button オブジェクトに IsMouseOVER プロパティがあることがわかります。
しかし、IsMouseOver を持たないグリッドまたはその他の要素のマウスオーバーの効果を作成するにはどうすればよいでしょうか??
ありがとうマルコム
編集:私はそれを理解しました。トリガーの設定方法が間違っていました。
sql-server - SQL Server の "AFTER INSERT" トリガーに、挿入されたばかりの行が表示されない
次のトリガーを検討してください。
テーブル someTable があり、人々が不正なレコードを挿入するのを防ごうとしています。この質問の目的のために、不良レコードにはすべて数値のフィールド「someField」があります。
もちろん、これを行う正しい方法はトリガーを使用することではありませんが、私はソース コードを制御していません... SQL データベースだけです。そのため、不良行の挿入を実際に防ぐことはできませんが、すぐに削除することはできます。これは、私のニーズには十分です。
トリガーは機能しますが、問題が 1 つあります...トリガーが起動すると、挿入されたばかりの不良レコードが削除されないようです...古い不良レコードは削除されますが、挿入されたばかりの不良レコードは削除されません。そのため、他の誰かが来て別の INSERT を実行するまで削除されない不良レコードが 1 つ浮かんでいることがよくあります。
これはトリガーの理解に問題がありますか? トリガーの実行中に、新しく挿入された行はまだコミットされていませんか?
sql - 別のスキーマでテーブルのトリガーを作成するときの権限が不十分です
スキーマ B にあるテーブルに対してスキーマ A にトリガーを作成しようとすると、ora エラーが発生します: 権限が不十分です。
どのような権限が必要ですか?
mysql - 監査ログを維持するための BEFORE または AFTER トリガー
トリガーの作成ページで MySql 5.0 のコメント ストリームを読んでいましたが 、推奨事項が適切かどうか、およびそれらが 5.1 にも適用されるかどうかをコミュニティに尋ねたいと思います。今日トリガーをいじって気付いたのは、AFTER UPDATE を使用して古いテーブルのフィールドを更新することは不可能だということです。
- BEFORE トリガーには注意してください。特に InnoDB エンジンを使用している場合、挿入は失敗しますが、BEFORE トリガーからのアクションは成功するという制約が発生する可能性があります。
- BEFORE トリガーは、トランザクションではなく、主に制約またはルールに使用し、NEW.* 列を微調整することは問題ありません。
- 履歴テーブルへの挿入や非正規化の更新など、他のほとんどの操作では AFTER トリガーを使用してください。
wpf - WPFデバッグデータトリガー?
私は非常に単純なことをしようとしています。bool にバインドされた ToggleButton.IsChecked プロパティがあります。背景を赤 (偽) と緑 (真) の間で切り替える必要があります。しかし、何らかの理由で、赤と背景なしの間でトグルしているようです。コンバーターを使用して、ソースから適切な通知を受け取っているかどうかを確認しましたが、1 つのトリガー (false/red) が機能し、もう 1 つのトリガー (true/green) が機能しない理由がわかりません。また、人々がこの種の問題をどのようにデバッグしているかを聞きたいです。ありがとう!
これがコードです。
更新:トグルボタンをチェックボックスに変更したところ、機能しました。理由がわからない...
sql - SQLでLastUpdatedDate列を維持する最良の方法は何ですか?
最後に更新または挿入された時刻の timedate 列を持つデータベース テーブルがあるとします。どちらが望ましいでしょう:
- トリガーでフィールドを更新します。
- 挿入/更新を行っているプログラムにフィールドを設定させます。
再コンパイルする必要さえないので、最初のオプションが最も簡単に思えますが、それは実際には大したことではありません。それ以外に、どちらか一方を優先する理由を考えるのに苦労しています。助言がありますか?
triggers - 最終更新日: アンチパターン?
DateLastUpdated のような名前のデータベース テーブルの列を参照する質問が浮かんでいるのをよく見かけます。理解できません。
私が今まで見た唯一のコンパニオン フィールドは、LastUpdateUserId などです。更新が行われた理由についての指標はありません。または更新が何であったかさえ。
その上、このフィールドはトリガー内から書き込まれることがあり、使用できるコンテキストがさらに少なくなります。
確かに、監査証跡にはほど遠いものです。だから正当化できない。また、ログなどのどこかに監査証跡がある場合、このフィールドは冗長になります。
私は何が欠けていますか?このパターンが人気の理由は?
sql - SQL CLR トリガーでこれを実行できますか? それとももっと良い方法がありますか?
データベース テーブルを監視するサービスを (おそらく c# で) 作成したいと考えています。レコードがテーブルに挿入されると、サービスが新しく挿入されたデータを取得し、それを使用して複雑なビジネス ロジックを実行します (TSQL には複雑すぎます)。
1 つのオプションは、サービスが定期的にテーブルをチェックして、新しいレコードが挿入されているかどうかを確認することです。そのようにすることの問題は、挿入が発生するとすぐにサービスにそれを認識させたいことであり、データベースのパフォーマンスを低下させたくないということです。
少し調べてみると、CLR トリガーを作成すればうまくいくようです。挿入が発生したときに起動するトリガーを C# で記述し、新しく挿入されたデータを Windows または WCF サービスに送信できます。
SQL CLR トリガーの適切な (または可能な) 使用方法は何だと思いますか?
これを達成する方法について他のアイデアはありますか?