問題タブ [database-trigger]

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.

0 投票する
1 に答える
1288 参照

oracle - コードがjava.sql.SQLException:ORA-01438をスローするのはなぜですか?

このステートメントを介してテーブルにデータを挿入しています:

ターゲットテーブルには次のトリガーがあります。

0 投票する
1 に答える
2914 参照

oracle - Oracle AFTER/BEFORE CREATE ON DATABASE トリガー: オブジェクト ソースへのアクセス方法

Oracle の疑似バージョン管理とリポジトリを実装しようとしています。アイデアは、保存された関数/プロシージャが変更されたとき、または作成されたグローバル DATABASE トリガーが起動されたときです。これにより、変更されたオブジェクトの現在のソースが取得され、テーブルに保存されます。だから私は2つのトリガーを使用しています:

AFTER_MODIFY トリガーがコンパイル済みオブジェクトの古いバージョン (ソース) を参照することを除いて、すべて正常に動作します。からソースを取得しようとSYS.SOURCE$.SOURCEしましたがdbms_metadata.get_ddl(OBJ_TYPE, OBJ_NAME, OBJ_OWNER)、同じ結果が得られました。

「Oracle 10g+ではできない」などのアドバイスや明確な回答を求めています。

0 投票する
3 に答える
1906 参照

postgresql - PostgreSQLの列のデフォルト値を強制する方法は?

INSERT/UPDATE 中にデフォルトの値を優先してクエリの指定された値を無視するトリガー以外の実用的な方法はありますか?

これは私がアーカイブしたい動作です:

ありがとう!

0 投票する
2 に答える
10486 参照

mysql - Timestamp for row creation and last modification

I need to keep track of the time a row was inserted into the database, and the time it was last modified.

I tried to create two separate columns, and use CURRENT_TIMESTAMP:

However, this produced an error:

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

What is the best way to do this?

I'm thinking stored procedure, but looking for a standard solution. I'm also concerned with access privileges -- as few programs/things should be able to touch the timestamps as possible.


Although I would prefer MySQL answers, solutions for other RDBMS's are also appreciated!

0 投票する
2 に答える
4975 参照

entity-framework-4.1 - データベーストリガーで生成された主キー値で StoreGeneratedPattern.Identity を使用することはできませんか?

この質問は、私がここで尋ねた別の質問 ( Entity Framework 4.2 - データベースで生成された主キー値で TPT 継承を実現する方法は? ) に関連しており、トピックに記載されている問題に関する私の仮定が正しいかどうかを単純に明確にする必要があります。 .

問題(詳細):

  • EF (4.1) を使用して、既に存在するデータベースにアクセスしたい
  • データベースには、そのテーブルの主キー値の生成に関していくつかの制限があります (テーブル名を取り、次に利用可能な ID を返す UDF があります)
  • できるだけ簡単にするために、私の最初のアプローチは、ID 生成 UDF を呼び出して新しいデータ行の挿入時に新しい ID を設定するデータベース トリガーを (挿入前に) 定義することでした。
  • 次に、EDM の csdl 内の対応するエンティティの StoreGeneratedPattern プロパティを「Identity」に設定して、新しく生成された ID が DB に保存された後にエンティティ オブジェクトに設定されるようにします。

この結果は次のとおりです。

新しいエンティティ オブジェクトを作成し、それを DbContext に追加して SaveChanges を呼び出すと、対応するデータ行がデータベースに挿入されましたが、エンティティは新しいデータベース生成 ID で更新されませんでした。親の新しいIDが親に知られていないため、子エンティティの外部キープロパティを正しく設定できなかったため、相互に関連付けられている(親子)複数を一度に保存しようとしたときにこれに気付きましたDb コンテキスト。

これが、TPT 継承に関する上記の質問をした理由です。

数日間の調査と、この問題を解決するために頭に浮かんだすべてのことを試した後、これは単に機能しないことに気づきました。MSDN の StoreGeneratedPattern 列挙型のドキュメントとブログのいくつかの説明では、生成された値を取得するために StoreGeneratedPattern.Identity を設定する必要があることが示唆されていますが、DB が新しい行の挿入時に値を生成する場合、これは主キーの組み合わせには当てはまりません。データベーストリガー付き。

EF はデータベースで生成された値を取得するためにいくつかの基準が必要であり、ほとんどの場合、それはエンティティの ID になると思います。autoincrement (または ID 列など) に設定されたデータベース列の場合、DBMS は最後に挿入された ID 値 (MSSQL の @@identity など) を取得する機能を提供するため、問題はない可能性があります。しかし、トリガーを使用して新しい ID 値を生成する場合、EF は明らかに新しく挿入された行をクエリする方法を知りません (これを行うための適切な db に依存しない方法も想像できません)。

したがって、私の実際の質問は次のとおりです。上記の仮定は正しいですか、それともここで重要なことを見落としていますか?

これに関する明確化/インスピレーションを事前に感謝します。

編集(フォローアップの質問):

Ladislav からの回答を読んだ後、別の質問が発生します。

CSDL で StoreGeneratedPattern を設定した場合、SSDL で同じ値に設定する必要がありますか (逆も同様)? edm デザイナーのパッチは、CSDL で (デザイナーを介して) 変更すると、SSDL の StoreGeneratedPattern を自動的に同期するため、これが事実であることを暗示しています。

0 投票する
2 に答える
9594 参照

oracle - ステートメントのトリガー内でステートメントの影響を受ける行数を取得する方法

テーブル(customersと呼ばれる)でINSERTUPDATEまたはDELETE操作が実行されるたびに起動するステートメントレベルのトリガーがあります。挿入/更新/削除された行数を含むメッセージを(DBMS_OUTPUTに)表示したい。

トリガーステートメントごとに1つのメッセージが必要です。たとえば、「4行がcustomersテーブルに挿入されました」。

トリガー宣言の内側、つまり以下のコードのXXXから、トリガーステートメントの影響を受ける行数にアクセスするにはどうすればよいですか。

ドキュメントに何も見つかりません。助けていただければ幸いです。

0 投票する
1 に答える
1816 参照

mysql - ネストされた select を使用した MySQL トリガー

テーブル A への挿入後に実行され、複数の行に関係する MySQL トリガーを作成しようとしています。基本的に、テーブル A に挿入すると、テーブル C のすべての行とテーブル A から挿入された ID を使用して、テーブル B に行を挿入したいと考えています。

これが一般的な考え方です -

ありがとう!

エヴァン

0 投票する
2 に答える
3839 参照

sql - SQL Server:DDLトリガー、テーブル作成の制御

SQLServer2008を使用しています。

私は次のようなDDLトリガーを作成しています:

作成されたテーブルを取得できますか?

通常のテーブルトリガーで挿入または削除されたようなもの?!

0 投票する
1 に答える
2528 参照

database - 古い値を挿入するトリガー

テーブルに次のトリガーがあります。直面している問題はmy_hist、条件が になると、古い値と新しい値の両方がテーブルに挿入されることupdated = 'Y'です。

条件が になったときに、古い値を my_hist テーブルに効率的に挿入するにはどうすればよいですかupdated = 'Y'

ありがとう

更新 1

更新updated = 'Y'している場合、記録がある場合

id = 3、start_date='01-Jan-2014' および end_date='31-Jan-2014' でデータを更新すると id = 3, start_date=='01-Jan-2014' and end_date='31-Mar-2014'、my_hist テーブルに 2 つのレコードが作成されます。

理想的には、新しいデータid = 3 and start_date='01-Jan-2014' and end_date='31-Jan-2014'であるため、2 行目ではなく、my_hist テーブルにのみ含める必要があります。end_date='31-Mar-2014'