sql - 如何在oracle中打印游标值?

标签 sql oracle stored-procedures plsql oracle11g

我是 oracle 的新手,我正在学习游标。我的表 City 有两列 city_id,city_name。所以,这就是我尝试的:

DECLARE
  CURSOR city_list is
  SELECT * from OT.City;

  v_list SYS_REFCURSOR;
BEGIN
  OPEN city_list FOR
   v_list := city_list;
   DBMS_OUTPUT.PUT_LINE(v_list.city_id);
   EXIT WHEN city_list%NOTFOUND;
  CLOSE city_list;
END;
/

我试图将游标的数据分配给新声明的值 v_list SYS_REFCURSOR; .但输出在 v_list := city_list; 处作为错误出现.如何将游标的所有值直接分配给另一个游标或有其他方法吗?

最佳答案

您仍然可以使用 SYS_REFCURSOR通过位于 OPEN 之间和 FOR子句,然后是光标,然后

需要添加LOOP FETCH INTO... END LOOP模板并在当前代码后关闭打开的游标:

DECLARE
  v_list SYS_REFCURSOR;
  v_city_id   city.city_id%TYPE;
  v_city_name city.city_name%TYPE;
BEGIN 
  OPEN v_list FOR
    SELECT city_id, city_name FROM City;

  LOOP 
    FETCH v_list
    INTO  v_city_id, v_city_name;
    EXIT WHEN v_list%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_city_id || ' - ' || v_city_name);
  END LOOP;
  CLOSE v_list;  
END;
/

Demo

关于sql - 如何在oracle中打印游标值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58156461/

相关文章:

mysql - 需要获取oracle表中第一次出现和第二次出现之间的记录数

java - Hibernate 与 HSQLDB 和 Oracle

sql - 基于sql中的空/非空参数构建where子句

sql - 带有 WHERE 条件和 INNER JOIN 的 SELECT 命令

sql - Arel 中的 SQL WITH RECURSIVE 等价物

php - Ajax 代码无响应

mysql - 如何选择从现在起过去 30 天内每个日期的最新时间的行

sql 到 postgresql

sql - 删除oracle表: size is 389 GB中的重复记录

java - 剖析 Oracle 10g 数据库 JVM