mysql - 从 Oracle 查询的内容生成 mysql import 语句时出现问题

标签 mysql oracle insert export

我几乎已经让下面的查询正常工作,但是执行脚本时两个字段 qcare_end 和 Warranty_end 都会生成无效的标识符错误 另外 - 我希望使用这个脚本(以及一些类似的脚本)来生成一系列操作,这些操作将从我们的 oracle 契约(Contract)和零件管理数据库中获取数据子集,并将其注入(inject)到我们用于支持的 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 where ROWNUM <= 10 ORDER BY SERIAL_NO; || system_id || ''',''' || customer_code || ''',''' || serial_no || ''',''' || system_type || ''',''' || description || ''',''' ||qcare_end|| ''',''' ||warranty_end|| ''')' * ERROR at line 3: ORA-00904: "WARRANTY_END": invalid identifier

SQL>

我不确定为什么表别名不起作用 - 它在常规查询中似乎没问题,但当我尝试生成导入语句时就不行了,然后我可以定期将其通过管道传输到 mysql 中。

对我缺少的东西有什么想法吗? 干杯 斯科特

最佳答案

斯科特,

别名不起作用,因为您将它们放在双引号中并且大小写混合(提示:不要这样做)。这意味着您必须以这种方式引用它们:

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

从技术上讲,无论如何,您都不需要联合后半部分的别名,联合的前半部分驱动内联 View 的列名称。

关于mysql - 从 Oracle 查询的内容生成 mysql import 语句时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14637099/

相关文章:

mysql - 需要帮助制定 SQL 查询 (mysql)

mysql - 对所选行的值求和

oracle - 使用 Oracle trunc() 的结果奇怪?

oracle - SQL Developer太慢了。我还能使用什么?

c++ - 将节点插入二叉搜索树/链表?

mysql - JOIN 三个表

mysql - 如何轻松将多个 sql 文件导入 MySQL 数据库?

php - 外键没有自动递增

java - sql distinct什么时候比java编程快 'distinct'

mysql - IF 语句问题 : MySQL