値のリストを条件に貼り付けようとすると、クエリがORA-00907エラーをスローします。
背景:私は開発者ではありません。会社の実装のために、Peoplesoft内でPS/Queryを使用してクエリを記述できるようになるまで十分に研究されたエンドユーザーです。私は、現在バージョンFSCM 8.90.08.024であるPeoplesoftのFSCMモジュール(Financials and Supply Chain Management)を使用しており、ベースデータベースとしてOracle11gを使用していると思います。
私はほとんど独学で、私たちが持っている技術専門家はデータベース/アプリケーション関連のもので忙しい、または彼らは私のセクションの特定のデータニーズに精通していません。
データベースをクエリするSQLステートメントを直接記述できないことを指摘しておく必要があります。「PS/Query」(クエリマネージャーとも呼ばれます)と呼ばれる組み込みプログラムをGUIで使用する必要があります。このプログラムは、SQLを書き込み、データベースに実行してデータを抽出できるクエリとして保存します。これは、次の点でのみ私の質問に関連しています。
1. I cannot create or alter views/tables 2. I cannot perform any type of SQL Statement except "SELECT" 3. I can embed PL/SQL, MetaSQL and plain SQL into Expressions 4. At this point, Query Manager is the only option I have.
PS / Queryは、Oracleのドキュメントやこのようなサイトを除けば、これまでのところSQLに関する私の唯一の経験です。私の調査によると、これは「実際の」SQLプログラマーによって非常に制限されていると考えられています。この制限により、SQLコーディングのベストプラクティスと思われる方法に違反する方法で作業を行う必要があります。
クエリリクエスト:特定のシステム定義のカテゴリコードに対して(バウチャーとPOの)支出を引き出す、作成をリクエストされたクエリがあります。私がやろうとしているのは、バウチャーIDを取得し、ベンダーとカテゴリコードごとに商品の金額を合計して、結果を表示することです。つまり、ベンダー/カテゴリの一意の組み合わせごとに、そのベンダー/カテゴリの組み合わせを持つすべてのバウチャーの金額を合計します。
SUM(フィールド名)OVER(PARTITION BYフィールド名、フィールド名)構文を使用します。
したがって、最終結果は次のようになります...
Code Vendor Amount 123-45 Acme $5000.00 123-45 Apple $4200.00 123-46 Acme $750.00
そうは言っても、上記の結果セットを取得するためにクエリマネージャーが表示しているSQLは次のとおりです。
SELECT DISTINCT D.CATEGORY_CD, D.TN_DESCR1000, C.VENDOR_ID, E.NAME1, SUM ( A.MERCH_AMT_VCHR) OVER (PARTITION BY D.CATEGORY_CD, C.VENDOR_ID),E.SETID,E.VENDOR_ID
FROM PS_PO_LINE_MATCHED A, PS_PO_LINE B, PS_PO_HDR C, PS_ITM_CAT_TBL D, PS_VENDOR E, PS_PYMNT_VCHR_XREF F
WHERE A.BUSINESS_UNIT = B.BUSINESS_UNIT
AND A.PO_ID = B.PO_ID
AND A.LINE_NBR = B.LINE_NBR
AND B.BUSINESS_UNIT = C.BUSINESS_UNIT
AND B.PO_ID = C.PO_ID
AND D.CATEGORY_ID = B.CATEGORY_ID
AND D.EFFDT =
(SELECT MAX(D_ED.EFFDT) FROM PS_ITM_CAT_TBL D_ED
WHERE D.SETID = D_ED.SETID
AND D.CATEGORY_TYPE = D_ED.CATEGORY_TYPE
AND D.CATEGORY_CD = D_ED.CATEGORY_CD
AND D.CATEGORY_ID = D_ED.CATEGORY_ID
AND D_ED.EFFDT <= SYSDATE)
AND ( F.SCHEDULED_PAY_DT >= TO_DATE('2010-07-01','YYYY-MM-DD')
AND F.SCHEDULED_PAY_DT <= TO_DATE('2011-06-30','YYYY-MM-DD'))
AND D.CATEGORY_CD LIKE :1
AND E.VENDOR_ID = C.VENDOR_ID
AND A.BUSINESS_UNIT = F.BUSINESS_UNIT
AND A.VOUCHER_ID = F.VOUCHER_ID
ORDER BY 1
根本的な問題:これは正常に機能しますが、一度に1つのカテゴリコードでしかプロンプトを表示できません。カテゴリコードは5桁で、3桁の「クラス」、ダッシュ、2桁の「サブクラス」です。このクエリ結果を取得するために必要な375のカテゴリコードのリストがあります。
このバージョンでは、ワイルドカードの入力を許可するプロンプトを設定しました(つまり、123-%%)が、それでもクエリを約100回実行することになります。Query Managerでは、Criteriaで「InList」式タイプを使用できますが、リストの各エントリを手動で入力する必要があります。
コードリストのプレーンテキストコピーを適切な引用符/カンマを使用して式に貼り付け、指定されたすべてのNIGPコードの組み合わせリストを取得できるように設定しようとしています。Query Managerによって作成されたPromptフィールドでは、リストの貼り付けは許可されていません(私が知る限り)。
解決策の試み:http://peoplesoft.ittoolbox.com/groups/technical-functional/peoplesoft-other-l/create-an-expression-in-psoft-90-query-to-paste-a-のページを表示しましたlist-of-emplids-2808427と私はそこで与えられた答えのいくつかを試しましたが、どれもうまくいきませんでした。そのページから、この変更されたSQLを試してみることになりました(明らかに、コードのリストはここに表示するために少し切り捨てられています)。
SELECT DISTINCT D.CATEGORY_CD, D.TN_DESCR1000, C.VENDOR_ID, E.NAME1, SUM ( A.MERCH_AMT_VCHR) OVER (PARTITION BY D.CATEGORY_CD, C.VENDOR_ID),E.SETID,E.VENDOR_ID
FROM PS_PO_LINE_MATCHED A, PS_PO_LINE B, PS_PO_HDR C, PS_ITM_CAT_TBL D, PS_VENDOR E, PS_PYMNT_VCHR_XREF F
WHERE A.BUSINESS_UNIT = B.BUSINESS_UNIT
AND A.PO_ID = B.PO_ID
AND A.LINE_NBR = B.LINE_NBR
AND B.BUSINESS_UNIT = C.BUSINESS_UNIT
AND B.PO_ID = C.PO_ID
AND D.CATEGORY_ID = B.CATEGORY_ID
AND D.EFFDT =
(SELECT MAX(D_ED.EFFDT) FROM PS_ITM_CAT_TBL D_ED
WHERE D.SETID = D_ED.SETID
AND D.CATEGORY_TYPE = D_ED.CATEGORY_TYPE
AND D.CATEGORY_CD = D_ED.CATEGORY_CD
AND D.CATEGORY_ID = D_ED.CATEGORY_ID
AND D_ED.EFFDT <= SYSDATE)
AND ( F.SCHEDULED_PAY_DT >= TO_DATE('2010-07-01','YYYY-MM-DD')
AND F.SCHEDULED_PAY_DT <= TO_DATE('2011-06-30','YYYY-MM-DD'))
AND D.CATEGORY_CD = '005-00' OR D.CATEGORY_CD IN ('015-00,'' '015-06,'' '015-10,'' '615-07'')
AND E.VENDOR_ID = C.VENDOR_ID
AND A.BUSINESS_UNIT = F.BUSINESS_UNIT
AND A.VOUCHER_ID = F.VOUCHER_ID
ORDER BY 1
そして、上記のSQLは、ORA-00907エラーを引き起こしているものです。誰かが以前にこの問題に遭遇したことがありますか?テキストの巨大な壁、私は知っています。謝罪いたします。これはここでの私の最初の投稿であり、関連するものを何も残さないようにしています。
この質問に拍車をかけた当面の問題は修正されましたが、その要求は非常に大きな氷山の一角にすぎません。ある時点で、クエリマネージャーを使用してプレーンテキストリストを基準として貼り付ける方法を見つける必要があります。 、できればAnalyticGroupingとうまく連携する方法で。
TL; DRバージョン:
Peoplesoft Query Managerを使用して、OVER、PARTITIONBYを使用したグループ化で分析SUMを実行します。リストを条件に貼り付けようとすると、ORA-00907エラーがスローされます。
どんな助けでも大歓迎です。ありがとう!