在Oracle应用程序express SQL脚本中运行脚本会导致错误,但在SQL命令和SQLDeveloper中运行时运



当我在oracle应用程序express SQL脚本中运行此脚本时,我会收到此错误(如下所示),但如果在应用程序express的SQL命令部分或SQL Developer中运行,则不会收到此错误。有什么解释吗?

ORA-2001:查询必须以SELECT或with 开头

UPDATE (SELECT w.bay_caseflow_sku_count, 
           CASE WHEN combined_layer_qty <= 0 
       AND bay_activity > 0 
       AND adjusted_bay_USPD * day_count <= bay_activity * caseflow_uspd_max THEN 1 
                ELSE 0 END AS new_bay, 
           w.bulk_caseflow_sku_count, 
           CASE WHEN combined_layer_qty <= 0 
       AND bulk_activity > 0 
       AND adjusted_bulk_USPD * day_count <= bulk_activity * caseflow_uspd_max THEN 1 
                ELSE 0 END AS new_bulk, 
           w.combined_caseflow_sku_count, 
           CASE WHEN combined_layer_qty <= 0 
       AND adjusted_combined_USPD <= caseflow_uspd_max THEN 1 
                ELSE 0 END AS new_combined 
      FROM extract_work_001 w 
           INNER JOIN control_records c 
              ON w.loc_id = c.loc_id 
     WHERE w.combined_layer_qty = 0) t 
SET bay_caseflow_sku_count = new_bay, 
   BULK_CASEFLOW_SKU_COUNT = NEW_BULK, 
   COMBINED_CASEFLOW_SKU_COUNT = NEW_COMBINED

这似乎是一个错误,尽管我在MOS上找不到类似的东西。ORA-2001错误代码意味着这是一个应用程序定义的错误,因此APEX似乎正在解析该语句,并且可能存在区分大小写的问题。

如果我创建了一个名为t42的伪表,那么输入一个与您的结构相同的简单命令会得到相同的错误:

UPDATE (SELECT * FROM T42)
SET X = NULL
ORA-20001: Query must begin with SELECT or WITH

如果我将SELECT更改为select,则它起作用:

UPDATE (select * FROM T42)
SET X = NULL
0 row(s) updated. 0.02 seconds

运行您的精确语句也会得到ORA-20001;同样,仅仅将SELECT更改为select就超过了这一点,而我得到了ORA-00942: table or view does not exist,这是合理的,因为我没有定义您的表。

这是在的测试工作区上https://apex.oracle.com.我只能猜测APEX在尝试执行脚本之前正在解析它,但它到底在幕后做什么是个谜。这不是一个非常令人满意的解释,但至少似乎有一个变通办法。。。

相关内容

  • 没有找到相关文章

最新更新