0

以下のクエリはほとんど機能していますが、スクリプトを実行すると、qcare_end と Warranty_end の 2 つのフィールドが両方とも無効な識別子エラーを生成します。これは、オラクル契約および部品管理データベースからデータのサブセットを取得し、インシデントを記録するときにサポートで使用する mysql データベースにそれを送り込みます

    Select
    'Insert Into mysqldbtable (system_id, customer_code,, serial_no, system_type, description, qcare_end, warranty_end) Values (''' 
    || system_id || ''',''' || customer_code || ''',''' || serial_no || ''',''' || system_type || ''',''' || description ||  ''')'
  FROM (SELECT SYSTEMS.SYSTEM_ID
               --            ,SYSTEMS.SITE_NAME
              , CUSTOMER_ADDRESSES.CUSTOMER_CODE
               --            , CUSTOMER_ADDRESSES.NAME
              , SYSTEMS.SERIAL_NO
              , SYSTEMS.SYSTEM_TYPE
              , PM.DESCRIPTION
               --            ,MAX(EI.END_DATE)
              , TO_DATE(NULL) AS "qcare_end"
              , MAX(systems.warranty_end) AS "warranty_end"
        --            ,systems.warranty_code
          FROM LEO.CUSTOMER_ADDRESSES CUSTOMER_ADDRESSES
               -- , LEO.CUSTOMERS CUSTOMERS
              , LEO.SYSTEMS SYSTEMS
               -- , LEO.EXHIBIT_ITEMS EI
              , LEO.PART_MASTER PM
         WHERE SYSTEMS.ADDRESS_CODE = CUSTOMER_ADDRESSES.ADDRESS_CODE
              -- AND CUSTOMER_ADDRESSES.CUSTOMER_CODE = CUSTOMERS.CUSTOMER_CODE 
              -- AND SYSTEMS.SYSTEM_ID = EI.SYSTEM_ID
           AND SYSTEMS.SYSTEM_TYPE = PM.PART_NO
         GROUP BY SYSTEMS.SYSTEM_ID,
                  SYSTEMS.SERIAL_NO,
                  CUSTOMER_ADDRESSES.CUSTOMER_CODE,
                  CUSTOMER_ADDRESSES.NAME,
                  SYSTEMS.SITE_NAME,
                  SYSTEMS.SYSTEM_TYPE,
                  PM.DESCRIPTION
        HAVING(SYSTEMS.SYSTEM_TYPE NOT IN('COMPLETE', 'ESSENTIAL', 'LOAN DEMO', 'LOAN CUSTOMER', 'MISC', 
        'ORPH-CHILD-SYS', 'ORPH_CHILD_SYS', 'PROD-BOM', 'QCARE', 'QSUPPORT', 'SPARES', 'STANDARD', 'WARRANTY', 'SOFT CARE')) 
        AND (SYSTEMS.SITE_NAME NOT LIKE '%DO NOT USE%' AND CUSTOMER_ADDRESSES.NAME NOT LIKE 'QUANTEL%' AND CUSTOMER_ADDRESSES.NAME NOT LIKE '%LOCATION NOT KNOWN%')
       UNION SELECT SYSTEMS.SYSTEM_ID
               --            ,SYSTEMS.SITE_NAME
              , CUSTOMER_ADDRESSES.CUSTOMER_CODE
               --            , CUSTOMER_ADDRESSES.NAME
              , SYSTEMS.SERIAL_NO
              , SYSTEMS.SYSTEM_TYPE
              , PM.DESCRIPTION
               --            ,MAX(EI.END_DATE)
              , MAX(EI.END_DATE) AS "QCare_End"
              , TO_DATE(NULL) "Warranty_End"
        --            ,MAX(systems.warranty_end)
        --            ,systems.warranty_code
          FROM LEO.CUSTOMER_ADDRESSES CUSTOMER_ADDRESSES
               -- , LEO.CUSTOMERS CUSTOMERS
              , LEO.SYSTEMS       SYSTEMS
              , LEO.EXHIBIT_ITEMS EI
              , LEO.PART_MASTER   PM
         WHERE SYSTEMS.ADDRESS_CODE = CUSTOMER_ADDRESSES.ADDRESS_CODE
              -- AND CUSTOMER_ADDRESSES.CUSTOMER_CODE = CUSTOMERS.CUSTOMER_CODE 
           AND SYSTEMS.SYSTEM_ID = EI.SYSTEM_ID
           AND SYSTEMS.SYSTEM_TYPE = PM.PART_NO
         GROUP BY SYSTEMS.SYSTEM_ID,
                  SYSTEMS.SERIAL_NO,
                  CUSTOMER_ADDRESSES.CUSTOMER_CODE,
                  CUSTOMER_ADDRESSES.NAME,
                  SYSTEMS.SITE_NAME,
                  SYSTEMS.SYSTEM_TYPE,
                  PM.DESCRIPTION
        HAVING(SYSTEMS.SYSTEM_TYPE NOT IN('COMPLETE',  'ESSENTIAL', 'LOAN DEMO', 'LOAN CUSTOMER'
        , 'MISC', 'ORPH-CHILD-SYS', 'ORPH_CHILD_SYS', 'PROD-BOM', 'QCARE', 'QSUPPORT', 'SPARES', 'STANDARD', 'WARRANTY', 'SOFT CARE')) 
        AND (SYSTEMS.SITE_NAME NOT LIKE '%DO NOT USE%' AND CUSTOMER_ADDRESSES.NAME NOT LIKE 'QUANTEL%' AND CUSTOMER_ADDRESSES.NAME NOT LIKE '%LOCATION NOT KNOWN%'))
where ROWNUM <= 10 ORDER BY SERIAL_NO;

これは 10 件の結果を返すだけで、かなり正気のように思えますが、qcare と保証の終了日を再度追加すると、次のエラーで失敗します。

65 ROWNUM <= 10 ORDER BY SERIAL_NO; || システム ID || ''',''' || 顧客コード || ''',''' || シリアル番号 || ''',''' || システムタイプ || ''',''' || 説明 || ''',''' ||qcare_end|| ''',''' ||warranty_end|| ''')' * 3 行目のエラー: ORA-00904: "WARRANTY_END": 無効な識別子

SQL>

テーブル エイリアスが機能しない理由がわかりません。通常のクエリでは問題ないように見えますが、定期的に mysql にパイプできる import ステートメントを生成しようとしている場合はそうではありません。

私が見逃しているものについて何か考えはありますか?乾杯スコット

4

1 に答える 1

1

スコット、

エイリアスは二重引用符で囲み、大文字と小文字が混在しているため、機能しません(ヒント:そうしないでください)。つまり、それらをそのように参照する必要があります。

SELECT "qcare" FROM (your_query)

代わりにこれが必要になる可能性があります。これにより、エイリアスはすべて大文字になります。

, TO_DATE(NULL) AS qcare_end
, MAX(systems.warranty_end) AS warranty_end

, MAX(EI.END_DATE) AS QCare_End
, TO_DATE(NULL) Warranty_End

技術的には、とにかくユニオンの後半にエイリアスは必要ありません。インラインビューの列名を駆動するのはユニオンの前半です。

于 2013-02-01T01:05:15.900 に答える