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
Oracle PL/SQL游标更新_Sql_Oracle_Plsql_Cursor - Fatal编程技术网

Oracle PL/SQL游标更新

Oracle PL/SQL游标更新,sql,oracle,plsql,cursor,Sql,Oracle,Plsql,Cursor,我在用甲骨文。我的SQL技能很差,我想更新通过使用游标获得的查询信息,我读过关于使用WHERE CURRENT of语句的内容,但我不知道如何将其应用到我当前的代码中。有人介意伸出援助之手吗?我希望允许调用程序在当前代码中更新查询返回的游标中的一行(我希望更新比赛位置)。以下是我目前的代码: DECLARE l_race_rec race%rowtype; CURSOR Query1 IS SELECT * FROM RACE WHERE Race_Time='22-S

我在用甲骨文。我的SQL技能很差,我想更新通过使用游标获得的查询信息,我读过关于使用
WHERE CURRENT of
语句的内容,但我不知道如何将其应用到我当前的代码中。有人介意伸出援助之手吗?我希望允许调用程序在当前代码中更新查询返回的游标中的一行(我希望更新比赛位置)。以下是我目前的代码:

DECLARE 
l_race_rec race%rowtype;

CURSOR Query1
IS
  SELECT * 
    FROM RACE 
   WHERE Race_Time='22-SEP-14 12.00.00.000000000'; 
BEGIN
OPEN Query1;
LOOP
FETCH query1 INTO l_race_rec;
EXIT WHEN query1%notfound;

dbms_output.put_line( l_race_rec.raceid || ', ' || l_race_rec.race_location || ', ' || 
l_race_rec.race_type || ', ' || l_race_rec.race_time || ', ' || l_race_rec.sex || ', ' || 
l_race_rec.minage || ', ' || l_race_rec.maxage );
END LOOP;
CLOSE Query1;    
END;

下面是一个让你行动起来的例子:

DECLARE 
  l_race_rec race%rowtype;

  CURSOR Query1 IS
    SELECT * 
      FROM RACE 
      WHERE Race_Time = '22-SEP-14 12.00.00.000000000'; 

  nSome_value  NUMBER := 42;
BEGIN
  OPEN Query1;

  LOOP
    FETCH query1 INTO l_race_rec;
    EXIT WHEN query1%notfound;

    dbms_output.put_line(l_race_rec.raceid || ', ' ||
                         l_race_rec.race_location || ', ' || 
                         l_race_rec.race_type || ', ' ||
                         l_race_rec.race_time || ', ' ||
                         l_race_rec.sex || ', ' || 
                         l_race_rec.minage || ', ' ||
                         l_race_rec.maxage );

    UPDATE RACE
      SET SOME_FIELD = nSome_value
      WHERE CURRENT OF QUERY1;
  END LOOP;

  CLOSE Query1;    
END;

分享和享受。

这里有一个让你行动起来的例子:

DECLARE 
  l_race_rec race%rowtype;

  CURSOR Query1 IS
    SELECT * 
      FROM RACE 
      WHERE Race_Time = '22-SEP-14 12.00.00.000000000'; 

  nSome_value  NUMBER := 42;
BEGIN
  OPEN Query1;

  LOOP
    FETCH query1 INTO l_race_rec;
    EXIT WHEN query1%notfound;

    dbms_output.put_line(l_race_rec.raceid || ', ' ||
                         l_race_rec.race_location || ', ' || 
                         l_race_rec.race_type || ', ' ||
                         l_race_rec.race_time || ', ' ||
                         l_race_rec.sex || ', ' || 
                         l_race_rec.minage || ', ' ||
                         l_race_rec.maxage );

    UPDATE RACE
      SET SOME_FIELD = nSome_value
      WHERE CURRENT OF QUERY1;
  END LOOP;

  CLOSE Query1;    
END;

分享和享受。

为什么不使用光标进行循环呢

...
for row in query1
loop
dbms_output.put_line(row.raceid || ', ' ||
                     row.race_location || ', ' || 
                     row.race_type || ', ' ||
                     row.race_time || ', ' ||
                     row.sex || ', ' || 
                     row.minage || ', ' ||
                     row.maxage );

UPDATE RACE
  SET SOME_FIELD = nSome_value
  WHERE CURRENT OF QUERY1;

end loop;
...
这样就不需要打开和关闭光标

请记住,循环游标对于结果为1行以上的游标效果更好


祝你好运。

为什么不使用光标进行循环呢

...
for row in query1
loop
dbms_output.put_line(row.raceid || ', ' ||
                     row.race_location || ', ' || 
                     row.race_type || ', ' ||
                     row.race_time || ', ' ||
                     row.sex || ', ' || 
                     row.minage || ', ' ||
                     row.maxage );

UPDATE RACE
  SET SOME_FIELD = nSome_value
  WHERE CURRENT OF QUERY1;

end loop;
...
这样就不需要打开和关闭光标

请记住,循环游标对于结果为1行以上的游标效果更好


祝你好运。

如果有人想知道的话,你仍然坚持这个观点:(Oracle 3?真的吗?那是1983年发布的!3.2.20.09是SQL Developer的版本,这是一个客户端工具如果有人想知道的话,你仍然坚持这个观点:(Oracle 3?真的吗?那是1983年发布的!3.2.20.09是SQL Developer的版本,这是一个客户端工具。)