Sql Oracle使用单个查询更新和更改两个表中的几列记录
我有两个表,其中包含Oracle数据库中的位置和国家的名称。 Locations表中的列名称为location\u id(fk)、street\u address、state\u province和country\u id。Countries表中的列名称为country\u name、country\u id、location\u id(fk)。 我想在一个查询中更新位置和国家表的一些列。 我用下面的查询完成了,但它不起作用Sql Oracle使用单个查询更新和更改两个表中的几列记录,sql,oracle,plsql,Sql,Oracle,Plsql,我有两个表,其中包含Oracle数据库中的位置和国家的名称。 Locations表中的列名称为location\u id(fk)、street\u address、state\u province和country\u id。Countries表中的列名称为country\u name、country\u id、location\u id(fk)。 我想在一个查询中更新位置和国家表的一些列。 我用下面的查询完成了,但它不起作用 update (select l.street_address, l.
update (select l.street_address, l.postal_code, l.city, l.state_province, c.country_name
from hr.countries c, hr.locations l where l.country_id = c.country_id )
set l.street_address = '147 Spadina Ave',
l.postal_code = '122000215',
l.city = 'Toronto',
l.state_province = 'Ontario',
c.country_name = 'US'
where l.location_id = 1200;
但我遇到了来自PL/SQL的错误(ORA-00911:无效字符)
请帮助我解决此问题。错误ORA-00911:无效字符与update语句无关,可能来自PL/SQL的另一部分 update语句的实际错误在于不能通过内联视图更新多个表。因此,如果删除
set
子句中的别名l
,并运行该语句,则应该会得到ORA-01776:不能通过联接视图修改多个基表
但是,您可以使用而不是带有视图的触发器来执行此操作
在您的情况下,因为您是基于给定的主键(location\u id=1200
)更新表的,所以运行这两个简单的更新应该可以。没有必要加入
UPDATE hr.locations
SET street_address = '147 Spadina Ave',
postal_code = '122000215',
city = 'Toronto',
state_province = 'Ontario'
WHERE location_id = 1200;
UPDATE hr.countries
SET country_name = 'US' -- Toronto in United states, how did that happen?
WHERE country_id IN ( SELECT country_id
FROM hr.locations
WHERE location_id = 1200
);
更新(选择…
@Gordon。不允许在同一语句中更新两个表。