問題タブ [opensql]
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.
abap - LEFT OUTER JOIN は行を返しません
同じキーを持つ 2 つのテーブルがあります。内部テーブルのデータを後で操作せずに、1 つの SELECT で、右側のテーブルに対応するレコードがない左側のテーブルのすべてのレコードを取得したい (つまり、右側のテーブルの列は空の)。
最も論理的な方法は次のようになりますが、WHERE 句の外部結合で右側のフィールドを使用できないため、これはコンパイルされません。
有望に見えてコンパイルできる別の方法は次のとおりですが、右側のテーブルに対応するエントリがあるものでさえも戻すため、機能しません。
このオプションは、右側のフィールドを空白にするだけですが、結果セットにはすべてが含まれます。これは、右側からフィールドを選択することで確認できます。
これも機能しない別のオプションは、サブセレクトを使用することです。
abap - 警告を非表示にするプラグマ: where 条件で使用されるフィールドには null 値が含まれる場合があります
選択の WHERE 条件で使用されるフィールドにデータベース内の NULL 値が含まれている可能性がある場合に生成されるコンパイラ警告を非表示にするために使用できるプラグマを探しています。
SAP ノート 1088403 を読んで、ここで考えられる問題を認識していますが、WHERE 句で単一の値ではなく範囲を使用しているため、そこで提案されている解決策を適用できません。どちらの場合も、これは (私たちが知る限り) 欠陥があることが判明したことのないレガシー コードであり、間もなく置き換えられます。
ただし、プログラムの他のセクションを書き直しながら、プラグマを使用してこの警告を無効にしたいと考えています。これに使用できるプラグマを誰か教えてもらえますか?
選択例:
コンパイラは明らかにテキストベースの where をチェックできないため、警告を非表示にする動的 where 句を使用して、この select を置き換えたことに注意してください。
abap - SELECT-OPTIONS を手動で設定しますか?
とりわけ、フィールド、DATS タイプにRESB
基づいてテーブルからデータを取得するプログラムがあります。bdter
選択画面で、ユーザーは範囲を指定するか、標準範囲 (月初から今日) を使用します。
ただし、日付用に作成した選択オプションが入力されていない場合 (ユーザーが日付範囲を入力していない場合) に再利用しようとすると、この作業領域への変更が認識されないようです。私のselect文でそれを使用してください。
関連するコード セグメントが続きます。いくつかのテストの後、次のように結論付けました。
ユーザーによって変更されず、その後コードで設定されない場合
s_bdter
、レコードはフィルタリングされませんユーザーによって変更された場合
s_bdter
、レコードは正しくフィルタリングされますs_bdter
ユーザーによって変更され、その後コードで変更された場合、レコードは正しくフィルタリングされます
これは既知の文書化された動作ですか? 独自のRANGE
テーブルを作成して解決しましたが、これは常に行うべきことですか? コードの重複を防ぐために、未設定の選択オプションを再利用する方法はありませんか?
abap - COVP と GLPCA テーブルを結合する
私は SAP/ABAP 開発者ではないので、このトピックはやや不可解です (SAP テーブルは私にとって単なるデータソースです)。
COVP と GLPCA の 2 つのテーブルがあります。私はそれらに参加しようとしていますが、どのキーで参加できるかわかりません。
何か案が ?ありがとう
xml - 深い/ネストされた構造の保存
SAP は、データベース テーブルに深い構造を含めることを賢明に禁止しています。ただし、新しいプロジェクトの場合、永続的に保存したい深くネストされた構造があります。この構造には、別の数十の構造が含まれており、それぞれがさらにネストされている可能性があります。この構造は基本的に、特定のビジネス パートナーの数十の標準 SAP テーブルに含まれるデータのスナップショットです。私は現在、この構造を構築し、データを入力し、途中で XML として送信することに問題があるとは考えていません。
しかし、取引全体をデータベースに保存するにはどうすればよいか途方に暮れています。このネストされた混乱を 1 つのテーブルにダンプすることはできないため、基本的には、Z テーブル内の基になるすべてのテーブル リレーションシップを再作成する必要があります。これは面倒でエラーが発生しやすいだけでなく、非常に手間がかかるように思われるため、このデータを保存するための代替ソリューションを探しています。
オブジェクト全体のデータ ダンプを XML、フラット ファイル、またはdu jour形式のものに保存するだけの他のプログラミング言語で、このシナリオに遭遇しました。このデータ ダンプは、テーブルがクエリされ、オブジェクトが再構築されてメモリに読み込まれたときに読み込まれます。これは ABAP 開発の有効なアプローチですか? 一般的なネストされた構造を (分解) 構築するための既存のクラスまたは関数モジュールはありますか? それとも、独自のロジックを最初から作成する必要がありますか? または、私が見逃している代替手段はありますか?
greatest-n-per-group - Open SQL のグループごとの最大 N
特定の列の最大値を持つ (部分) キーによってテーブルから行を選択することは、SQL の一般的なタスクです。この質問には、さまざまなアプローチをカバーする優れた回答がいくつかあります。残念ながら、ABAP プログラムでこれを複製するのに苦労しています。
一般的に使用されるアプローチはどれもサポートされていないようです。
- サブクエリでの結合は、次の構文ではサポートされていません:
SELECT * FROM X as x INNER JOIN ( SELECT ... ) AS y
- 私の知る限り、複合キーに IN を使用する構文はサポートされていません。
SELECT * FROM X WHERE (key1, key2) IN ( SELECT key1 key2 FROM ... )
- より小さい比較によるそれ自体への左結合はサポートされていません。外部結合は EQ 比較のみをサポートします。
SELECT * FROM X AS x LEFT JOIN X as xmax ON x-key1 = xmax-key1 AND x-key2 < xmax-key2 WHERE xmax-key IS INITIAL
これらの各ソリューションを順番に試してみたところ、ABAP がそれらをサポートしていないようであり、同等のものを見つけることができなかったことを発見した後、サブクエリのデータをイタブ。
ABAP 開発におけるこの一般的なプログラミング要件のベスト プラクティスは何ですか?
abap - テーブルデータを画面に表示する
zrswheel という名前のデータベース テーブルがあります。3 つのデータを入力し、それらを画面に表示したいと思います。コードは次のとおりです。
実行すると、次のエラーが発生します。
実行時エラー: DBIF_RSQL_INVALID_RSQL を
除く。CX_SY_OPEN_SQL_DB
commit - 1 つのテーブルに対してコミットする
選択したテーブルだけをコミットすることはできますか?
私が抱えている問題は、プロセスによって更新されたテーブルが他にもあるかどうかわからないため、コミットでテーブルを更新しないようにしたいということです!
これは大量処理であり、プロセスの最後に (論理的に) コミットを呼び出します。
では、すべてではなく 1 つの特別なテーブルを更新する方法はありますか?
ケース: 私が使用しているような一括処理 Run は、最後に更新されます。
私たち/私のコードは、いくつかの機能を備えた単なる BAdI 実装です。特定のデータを取得するには、別のシステムにリクエストを行う必要があります。このリクエストは履歴ログに足跡を残すことができないため、システムに永続化しないようにリクエストをロールバックすることが厳密に必要です。
この要求は、作業項目のエントリに使用されます。したがって、1 量のデータ セットを処理してワーク アイテムを生成すると、このワーク アイテムは実行後にスローされるように登録されます。2度分のデータセットを処理し、他のシステムにリクエストを行うと、ロールバックする必要がありますが、最初の量のデータセットの作業項目エントリは削除されます (ロールバックされます)。
直接コミットでこれらの更新を行うことは可能でしょうか? ->いいえ。
内部テーブルで更新されるようにテーブルを管理し、実行の最後にそれらを更新することはできませんか? -> いいえ、それらのクラスは私たちに属していないためです。
実行の最後に単純にロールバックしないのはなぜですか? -> それらのクラスは私たちのものではありません。さもなければ、大量処理構造全体を変更する必要があります。
abap - ABAP データベースから画面テーブル コントロールへのデータの取得
構文エラーのない場所で立ち往生しているため、可能であれば助けが必要です。abap を使用して、データベース テーブルから画面 0300 にあるテーブル コントロールにデータを取得しています。そして、画面0300で直接処理を押すたびに、テーブルコントロールに関する情報がありません。これが画面 0300 のフロー ロジックです。
それが PBO / PAI コードです。
私はdynproプログラムを使用していることを考慮して
よろしくお願いします