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_Oracle Apex - Fatal编程技术网

SQL(Oracle)使用计算值更新多行(距离由勾股定理确定)

SQL(Oracle)使用计算值更新多行(距离由勾股定理确定),sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,如何使用从同一记录的其他两列中的值派生的计算数据更新所有行 情况如下: 我有一张名为“客户”的表格。它有4列-Customer\u ID,Customer\u Name,Coordinate\u X和Coordinate\u Y。在创建并用数据填充表格之后,我添加了一个名为Distance 我想做的是用从(0,0)到每行坐标X和坐标Y列中指定位置的计算距离填充距离列。我想我可以使用毕达哥拉斯的理论——当我使用查询时,会出现正确的值: Select SQRT(Power(customers.coo

如何使用从同一记录的其他两列中的值派生的计算数据更新所有行

情况如下:

我有一张名为“客户”的表格。它有4列-
Customer\u ID
Customer\u Name
Coordinate\u X
Coordinate\u Y
。在创建并用数据填充表格之后,我添加了一个名为
Distance

我想做的是用从(0,0)到每行
坐标X
坐标Y
列中指定位置的计算距离填充
距离
列。我想我可以使用毕达哥拉斯的理论——当我使用查询时,会出现正确的值:

Select SQRT(Power(customers.coordinate_x,2) + Power(customers.coordinate_y,2)) from customers
我胡思乱想,试图触发——由于缺乏经验而失败了。 然后我尝试使用查询填充该列,但也失败了

我一直在尝试这样的事情

update customers set distance = (Select SQRT(Power(customers.coordinate_x,2) + Power(customers.coordinate_y,2)) from customers) 

什么都不起作用-我得到的最好结果是
ORA-01427:单行子查询返回多行

查询比您正在执行的操作更简单:

update customers
    set distance = SQRT(Power(coordinate_x, 2) + Power(coordinate_y, 2)) 

查询比您正在执行的操作更简单:

update customers
    set distance = SQRT(Power(coordinate_x, 2) + Power(coordinate_y, 2)) 

戈登的回答是正确的。但是,对于此特定示例,最好使用虚拟列,并且在更改客户坐标后不必更新距离:

create table customers (
  customer_id number,
  customer_name varchar(255),
  coordinate_x number,
  coordinate_y number,
  distance  number generated always as (SQRT(Power(coordinate_x, 2) + Power(coordinate_y, 2))) VIRTUAL
))


看看这个SQLFIDLE:

戈登的答案是正确的。但是,对于此特定示例,最好使用虚拟列,并且在更改客户坐标后不必更新距离:

create table customers (
  customer_id number,
  customer_name varchar(255),
  coordinate_x number,
  coordinate_y number,
  distance  number generated always as (SQRT(Power(coordinate_x, 2) + Power(coordinate_y, 2))) VIRTUAL
))


请参阅此SQLFIDLE:

我删除了无关的数据库标记,因为该错误是Oracle错误。我删除了无关的数据库标记,因为该错误是Oracle错误。回答得好,但OP应该知道这只适用于Oracle 11g及以上版本。回答得好,但OP应该知道这只适用于Oracle 11g及以上版本。