【发布时间】:2021-12-06 04:30:20
【问题描述】:
我有 2 张桌子 X 和 Y。
X 就像
| D100_PTRSORID | D100_LIB17 | D100_LIB18 | D100_LIB19 | .... |
|---|---|---|---|---|
| 10 | 15000 | 2000 | 75000 | ... |
| 11 | 12500 | 2500 | 7000 | ... |
| 12 | ... | ... | ... | ... |
| ... | ... | ... | ... | ... |
D100_LIBXX 字段中的金额不正确。我想通过表格 Y 更新这些金额,就像
| GAD_PTRSORID | GAD_CODE | GAD_CAPITAL | ... | .... |
|---|---|---|---|---|
| 10 | 201** | 11000 | ... | ... |
| 10 | 202** | 1500 | ... | ... |
| 10 | 203** | 8500 | ... | ... |
| 11 | 201** | 12500 | ... | ... |
| ... | ... | ... | ... | ... |
D100_LIB17 与 GAD_CODE = '201**' 相关
D100_LIB18 与 GAD_CODE = '202**' 相关
D100_LIB19 与 GAD_CODE = '203**' 相关
我开始编写以下脚本来更新数据,但在“更新”级别(红色下划线)出现错误,并显示错误消息“更新”附近的语法不正确。预期的输入结束 - 或 - [...]
SELECT * FROM X
UPDATE Xx
SET Xx.D100_LIB17=Yy.GAD_CAPITAL
FROM X Xx
INNER JOIN Y Yy
ON Xx.D100_PTRSORID = Yy.GAD_PTRSORID and Yy.GAD_CODE = '201**'
SELECT * FROM X
【问题讨论】:
-
这好像是SQL,没有PL/SQL;如果这三个语句在一个脚本中,您实际上是否有语句分隔符(通常是分号)或它们之间的斜线? (您使用的客户端以及运行脚本的方式也可能会有所不同。)Oracle 也不允许
UPDATE ... FROM,但您可以使用相关更新。 -
@AlexPoole 你的意思是这段代码不适用于 PL/SQL 吗?我在互联网上查看了如何使用 PL/SQL 的 UPDATE 语句来编写这个脚本……我没有放“语句分隔符”。我是不是该 ?脚本的其余部分(创建表 X 和 Y 可以正常工作,无需分隔符)。您能否建议我一个可行的脚本?
-
你没有展示脚本的其余部分,或者说你是如何(或在哪个客户端)运行它的。您可能单独运行创建语句,或者在它们后面加上斜杠。您的客户给出的模糊错误表明它认为更新是之前选择的一部分。
标签: oracle join sql-update