問題タブ [dml]
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.
sql - Oracle:他のテーブルの値からテーブルaの列を更新します
作成しているアプリで複数のデータベースをサポートしようとしています。このアプリは主にHibernateを使用しますが、DMLステートメントがほんのわずかな時間で処理できる場合、数百万を超える行を繰り返し処理して個別に処理するのは非常に非効率的です。したがって、特定の操作では、SQLを作成する必要があります。私はMySQLの人間ですが、これまでのところ、SQLServerとMySQLで動作するアプリを持っています。私を困惑させた操作が1つあり、Oracleの更新クエリの一部を作成する方法がわからないようです。オラクルに関する限り、これはおそらく初心者の質問であることを私は知っていますが、私が探していたとき、私は明白な答えを逃したに違いありません。
MySQL用にこのタイプのクエリを作成する方法は次のとおりです。
table1 t1、table2 t2 set t1.colA = t2.colAを更新します。ここで、t1.colB=t2.colBおよびt1.colC=t2.colCです。
MySQLには、エイリアスを使用して'set'ステートメントの前にすべてのテーブルを指定できる優れた構造があります。これにより、ステートメントの残りの部分が大幅に簡素化されます。SQL Serverでは、update...joinを使用して同じことを行います。
Oracleでは、'update table1 set colA =(select ....)where presents(select ....)構文を使用しようとしましたが、これは機能しません-'サブクエリは複数の行を返します' エラー。また、構文で... using ...を使用してマージを使用しようとしましたが、「ソーステーブルから安定した行のセットを取得できません」というエラーが発生します。
私が達成しようとしていることをさらに説明するために、実行するクエリがいくつかあります。そのうちのいくつかは2つのテーブルを使用し、いくつかは3つのテーブルを使用します。最も複雑なものはこれを行う必要があります:
tableA.colBをtableC.colCの値で更新します。ここで、一致するすべての行についてtableA.colA=tableB.colAおよびtableB.colB=tableC.colBです。データの観点から、これは次のようになります(前と後):
これが十分に明確であることを願っています。Oracle用にこの種のDMLクエリを作成する方法を誰かが説明できますか?ボーナスポイントについては、PostgreSQLでも同じですか?:)
sql-server - ロギングなしの DML 操作 - SQL Server
ログファイルに記録せずに DML 操作を行う方法はありますか?
たとえば、データベースに行を挿入すると、トランザクションを使用するかどうかに関係なく、この操作はログ ファイルに記録されます。しかし、この操作をログ ファイルに記録したくありません。
sql-server - SQL Server トリガーで挿入、更新、削除された行をコピーする方法
ユーザーが tableHelloWorlds
を変更した場合、「実行したアクション」、実行した時間、元の行のコピーを に挿入する必要がありHelloWorldsHistory
ます。
列の長さのために、挿入、更新、および削除アクションの個別のトリガーは避けたいと思います。
私はこれを試しました:
挿入物が表示されるのを見たことはありませんが、更新は見ました。列リストを維持するのは楽しくありませんが、3 つの別々のトリガーを試すつもりです。
sql-server - SQL Server MERGE コマンド - 何も修飾されていない場合にトラップする方法
このコマンドでは、次のようなものを指定できます。
しかし、レコードが適格でなかった場合、どのようにトラップするのでしょうか? たとえば、stm.StudentMarks = 100? 「ELSE」を実行すると、構文エラーが発生します。
このコマンドは通常、このように使用されないことを知っています。しかし、これができれば、トランザクション、ロック、および複数の SQL ステートメントを使用する必要がなくなります。
sql - SQL Serverで2つのテーブルを差分し、DMLを生成して1つを調整します
2つのテーブルがあります。1つは2番目の古いバージョンです。新しいフィールドから2番目のフィールドにフィールドを追加したいと思います。フィールドを手動で解析せずにこれを行う簡単な方法はありますか(多くあります)?
繰り返しになりますが、フィールドを追加しているだけなので、現在のテーブルにするときに古いテーブルからデータを削除する必要はありません。
ありがとう!
PS SQLServer2005。
oracle - OracleのDMLによってアクセス/更新されたオブジェクトの認識
DBの変更に対して依存関係システムを実装しているので、たとえば、この変更とこの変更には、そのような状態のオブジェクトとそのオブジェクトが必要です。DDL依存関係を使用すると簡単ですが、特定のDML句によってどのオブジェクトが参照されているかを知る必要があります。そして後者も動的である可能性があります。
したがって、問題は次のとおりです。特定のDMLコードによってどのテーブルが参照されているかを言う方法はありますか?
主に、データセットのテーブルをすぐに変更しない句に興味がありますが、すべてのバリエーションを持つことができない可能性があるため、クライアント側でテーブルを変更する可能性があります。したがって、間接的な理解方法(DMLを実行してから、変更されたテーブルを確認するなど)はオプションではありません。
plsql - PL/SQL Bulk DML の実行が、親子制約のあるテーブルを含む大規模なデータセットで遅くなるのはなぜですか?
レコード テーブルに数十万以上のレコードがあるデータセットに対して、この PL/SQL パージ スクリプトの実行速度が遅い理由を突き止めようとしています。スクリプトを実行する前に、Record テーブルの特定のサブセット (約 75%) にパージのフラグが立てられます。
Record_Part テーブルの削除に他のテーブルよりも時間がかかるのはなぜですか? 3テーブルの親子階層の真ん中だからでしょうか。インデックスまたは制約に関して、ここで知識が不足していますか? この定期的なパージ プロセスをスピードアップするにはどうすればよいですか?
これは Oracle 10g データベースです。
私の質問を読んでくれてありがとう。
スキーマ (部分):
- レコード テーブルは親テーブルです
- Record_Part テーブルは Record の子です (Record には多くの Record_Part があります)
- Record_Person は Record_Part の子です (Record_Part には多くの Record_Person があります)
- 一般的な比率は 1:7:9 (レコード:レコードの部分:レコードの人物) です。
記録
- PK - システム ID
- 物理ID
- 保留中
- パージ中
Record_Part
- PK - Part_pk
- FK - record_sysid
Record_Person
- PK - システム ID
- FK - Part_pk
ランタイム
50000 件のレコード エントリ
- record_person forall は 1:40 分で完了します
- record_part forall は 1 分 20 秒で完了します
- forall の記録は 10 秒で完了します
300000 レコード エントリ
- record_person forall は 9 分で完了します
- record_part forall は 2 時間で完了します
- forall の記録は 20 分で完了します
2000000 レコード エントリ
- record_person forall は 1 時間で完了します
- record_part forall は 13 時間 (!) で完了します
- forall の記録は 8 分で完了します
インデックスと制約の DDL
スクリプト: (以下のスクリプトではタイムスタンプの印刷は省略されています)
mysql - 外部キー制約付きテーブルを切り捨てる方法は?
TRUNCATEが機能しないのはなぜmygroup
ですか? 私が持っているにもかかわらず、私はON DELETE CASCADE SET
得る:
エラー 1701 (42000): 外部キー制約で参照されているテーブルを切り捨てることはできません (
mytest
.instance
, CONSTRAINTinstance_ibfk_1
FOREIGN KEY (GroupID
) REFERENCESmytest
.mygroup
(ID
))
c# - SqlBulkCopy.WriteToServer がハングする Thread.Abort が呼び出されるが、その理由がわからない
与えられた:
- 何かが完了した
BenchMark
ことを知らせてくれるクラス。 - 複数のリストに解析された非常に大きな XML ファイル (~120MB)
いくつかのコード:
問題:
私のローカル開発環境では、すべて問題ありません。クラウドでこの操作を実行すると、ハングする原因になります。メソッドを使用してLogHelper.WriteLogItem
、このプロセスの進行状況を監視できます。特定のテーブルにランダムにぶら下がっているのを観察します。例外はスローされないため、トランザクションはロールバックされません。Table2
一括挿入でハングするとします。MS SQL Management Studio を使用してTable3
、でクエリを実行しましたが、問題はTable2
ありTable1
ませんでした (これは、トランザクションが中止されたことを意味しますか?)
ハングするので、プロセスを再実行します。今回はすぐにハングアップするため、次のようなログが取得される可能性があります。
... Table5 でハングします (BenchMark が完了していないため)。もう一度実行すると、残りのログは次のようになります。
...そして今ここにぶら下がっています。
それが役立つ場合は、ラックスペース クラウド ホスティングを使用しています。過去に、dbml ファイルからすべてのテーブルを削除して再読み込みすることでこれを修正できましたが、今回は機能しません。処理されているデータの量が問題を引き起こしているのでしょうか?
編集:この例のコードは、非同期スレッドで実行されます。スレッドが不明な理由で中断していることがわかったので、この問題を解決する理由を見つける必要があります。