Sql 当我尝试将更新脚本从**Access**转换为**Oracle时,更新脚本会导致错误**
我试图将一些查询转换为使用Oracle而不是Access,但未成功。我只是点错菜了吗?或者使用错误的语句 以下是脚本:Sql 当我尝试将更新脚本从**Access**转换为**Oracle时,更新脚本会导致错误**,sql,oracle,ms-access,converter,Sql,Oracle,Ms Access,Converter,我试图将一些查询转换为使用Oracle而不是Access,但未成功。我只是点错菜了吗?或者使用错误的语句 以下是脚本: Error starting at line : 142 in command - UPDATE CONTROL_RECORDS SET EXTRACT_WORK_001.BAY_CASEFLOW_SKU_COUNT = DECODE(-1, SIGN(0 - COMBINED_LAYER_QTY), 0, DECODE(-1, SIGN(0 - BAY_ACTIV
Error starting at line : 142 in command -
UPDATE CONTROL_RECORDS
SET EXTRACT_WORK_001.BAY_CASEFLOW_SKU_COUNT =
DECODE(-1,
SIGN(0 - COMBINED_LAYER_QTY), 0,
DECODE(-1,
SIGN(0 - BAY_ACTIVITY),
(DECODE(ADJUSTED_BAY_USPD*DAY_COUNT/BAY_ACTIVITY<=CASEFLOW_USPD_MAX,1,0)),
0),
EXTRACT_WORK_001.BULK_CASEFLOW_SKU_COUNT =
DECODE(-1,
SIGN(0 - COMBINED_LAYER_QTY), 0,
DECODE(-1,
SIGN(0 - BULK_ACTIVITY),
DECODE(ADJUSTED_BULK_USPD*DAY_COUNT/BULK_ACTIVITY<=CASEFLOW_USPD_MAX,1,0)),
0),
EXTRACT_WORK_001.COMBINED_CASEFLOW_SKU_COUNT =
DECODE(-1,
SIGN(0 - COMBINED_LAYER_QTY), 0,
DECODE(ADJUSTED_COMBINED_USPD<=CASEFLOW_USPD_MAX,1,0))
FROM CONTROL_RECORDS, EXTRACT_WORK_001
WHERE (CONTROL_RECORDS.LOC_ID = EXTRACT_WORK_001.LOC_ID)
AND ((EXTRACT_WORK_001.COMBINED_LAYER_QTY)=0)
Error at Command Line : 148 Column : 81 Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
这是原始的访问查询:
UPDATE CONTROL_RECORDS INNER JOIN EXTRACT_WORK_001
ON CONTROL_RECORDS.LOC_ID = EXTRACT_WORK_001.LOC_ID
SET
EXTRACT_WORK_001.BAY_CASEFLOW_SKU_COUNT = IIf(combined_layer_qty>0,0,IIf(bay_activity>0,IIf(adjusted_BAY_USPD*day_count/bay_activity<=caseflow_uspd_max,1,0),0)),
EXTRACT_WORK_001.BULK_CASEFLOW_SKU_COUNT = IIf(combined_layer_qty>0,0,IIf(bulk_activity>0,IIf(adjusted_BULK_USPD*day_count/bulk_activity<=caseflow_uspd_max,1,0),0)),
EXTRACT_WORK_001.COMBINED_CASEFLOW_SKU_COUNT = IIf(combined_layer_qty>0,0,IIf(adjusted_COMBINED_USPD<=caseflow_uspd_max,1,0))
WHERE (((EXTRACT_WORK_001.COMBINED_LAYER_QTY)=0));
请帮忙。我不喜欢什么方法或者什么。。。只要它能工作。用例更像iif,而不是解码。您的许多表达式都可以简化。此外,我认为Oracle中没有一种简单的语法可以跨连接进行更新
但是,假设这些表定义了合理的主键和外键,下面的方法可能有效。如果在保留键的表中出现错误,则需要提供有关表和关系的更多信息:
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 c.loc_id = w.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;
你有一些不匹配的括号。最好是你做的挖掘,以找出你错过了什么。你好,欢迎来到这个网站!这是个糟糕的问题。当你有一个特定的、与编程相关的问题时,我建议你阅读并回头看看。这个问题让我很难过我要说的是:几乎可以肯定的是,你必须完全从头重写上面的内容。基本上,只需在Oracle中重建它。如果您是SQL新手,我建议您选择一种更易于使用的关系数据库。甲骨文并没有让学习变得容易。SQL Server或PostgreSQL将是我的首选。不幸的是,在这件事上我没有选择。。。我已经为oracle创建了许多脚本,我对access几乎没有实践经验,但这一个是知识所无法理解的。是的,我正在学习。也许我应该先学点别的,但这是我没有的奢侈。好吧,接入中的IIF本质上就是案例陈述。除此之外,它看起来相当简单。收到此消息:SQL错误:ORA-01779:无法修改映射到非键保留表的列,请阅读整个注释,并采取它在本例中建议的操作。谢谢。你帮了我很多。我能让它工作。谢谢