Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle使用单个查询更新和更改两个表中的几列记录_Sql_Oracle_Plsql - Fatal编程技术网

Sql Oracle使用单个查询更新和更改两个表中的几列记录

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.

我有两个表,其中包含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.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。不允许在同一语句中更新两个表。