当我在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在尝试执行脚本之前正在解析它,但它到底在幕后做什么是个谜。这不是一个非常令人满意的解释,但至少似乎有一个变通办法。。。