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 使用rownum和order by更新Oracle表_Sql_Oracle - Fatal编程技术网

Sql 使用rownum和order by更新Oracle表

Sql 使用rownum和order by更新Oracle表,sql,oracle,Sql,Oracle,我试图更新oracle表中的一个字段,但我只想根据order by creationdate字段升序更新75行 这是我到目前为止所做的,但它不起作用 UPDATE extractcandidate SET process = 15 WHERE process IN (Select process from extractcandidate where process = 1500 and rownum <=75 order by creationdate); 要使方法正常工作,您还需要一

我试图更新oracle表中的一个字段,但我只想根据order by creationdate字段升序更新75行

这是我到目前为止所做的,但它不起作用

UPDATE extractcandidate
SET process = 15
WHERE process IN
(Select process from extractcandidate where process = 1500 and rownum <=75 order by creationdate);

要使方法正常工作,您还需要一个子查询:

UPDATE extractcandidate
    SET process = 15
    WHERE ec.process = 1500 AND
          creationdate IN (SELECT ec.creationdate
                           FROM (SELECT ec.*
                                 FROM extractcandidate ec 
                                 WHERE ec.process = 1500 
                                 ORDER BY ec.creationdate
                                )
                           WHERE rownum <= 75
                          );
注:

您需要在使用rownum之前进行排序。 比较需要在创建日期进行,而不是进程。
正如@Gordon提到的,您需要在ROWNUM之前完成订单

首先,按creationdate排序:

其次,将数量限制在75:

SELECT * 
  FROM (
        SELECT *
          FROM extractcandidate
         WHERE process=1500
         ORDER BY creationdate
       ) 
  WHERE rownum <= 75;

第3行错误:ORA-00932:不一致的数据类型:预期的日期得到了奇怪的数字,出于某种原因,它更新了84行。不确定原因??假设您希望将更新限制为process=1500,尽管您的原始问题中没有提到这一点。
SELECT * 
  FROM (
        SELECT *
          FROM extractcandidate
         WHERE process=1500
         ORDER BY creationdate
       ) 
  WHERE rownum <= 75;
UPDATE extractcandidate 
   SET process=15
 WHERE rowid IN (
                 SELECT ri 
                   FROM (
                         SELECT rowid as ri
                           FROM extractcandidate
                          WHERE process=1500
                          ORDER BY creationdate
                         ) 
                  WHERE rownum <= 75
                 );