database - 在 oracle 中没有成功编译游标
问题描述
我有表城市,它有两列 city_id 和 city_name。
所以,我声明了 plsql 块来查看这个表的输出。在这里,我尝试的是:
set serveroutput on
DECLARE
CURSOR CUR_NAME_LIST IS
SELECT * FROM OT.CITY;
V_NAME VARCHAR2(20);
BEGIN
OPEN CUR_NAME_LIST;
LOOP
FETCH CUR_NAME_LIST INTO V_NAME;
DBMS_OUTPUT.PUT_LINE(V_NAME.CITY_ID);
EXIT WHEN CUR_NAME_LIST%NOTFOUND;
END LOOP;
CLOSE CUR_NAME_LIST;
END;
/
当我编译时,我得到的错误是:
ORA-06550: line 11, column 33:
PLS-00487: Invalid reference to variable 'V_NAME'
ORA-06550: line 11, column 5:
PL/SQL: Statement ignored
解决方案
您的光标返回两列,因此在INTO
子句中必须有两个变量或一个具有两列的类型变量。
在您的情况下,为 id 再定义一个变量并在INTO
子句中使用它。或者使用类型变量city%rowtype
来处理所有数据。
如下所示:
set serveroutput on
DECLARE
CURSOR CUR_NAME_LIST IS
SELECT * FROM OT.CITY;
V_CITY CITY%ROWTYPE;
BEGIN
OPEN CUR_NAME_LIST;
LOOP
FETCH CUR_NAME_LIST INTO V_CITY;
DBMS_OUTPUT.PUT_LINE(V_CITY.ID || ' - ' || V_CITY.NAME );
EXIT WHEN CUR_NAME_LIST%NOTFOUND;
END LOOP;
CLOSE CUR_NAME_LIST;
END;
/
-或者-
set serveroutput on
DECLARE
CURSOR CUR_NAME_LIST IS
SELECT ID, NAME FROM OT.CITY;
V_NAME VARCHAR2(20);
V_ID NUMBER;
BEGIN
OPEN CUR_NAME_LIST;
LOOP
FETCH CUR_NAME_LIST INTO V_ID, V_NAME;
DBMS_OUTPUT.PUT_LINE(V_ID || ' - ' || V_NAME );
EXIT WHEN CUR_NAME_LIST%NOTFOUND;
END LOOP;
CLOSE CUR_NAME_LIST;
END;
/
干杯!!
推荐阅读
- powershell - 将所有 AD 用户从一个 OU 移动到另一个
- c++ - 如何在 ComboBox 的编辑字段中创建按钮?
- sqlite - sqlite 嵌套命令非常慢(比如 30 秒)
- intellij-idea - 如何将 IntelliJ 键映射转换为 VSCode 键绑定?
- python - 通过python中的给定分隔符将列表拆分为子列表
- spring-integration - Spring Integration Java DSL:不断创建和销毁集成流
- php - 从脚本更新 SiteTree_Localised 表
- wordpress - Wordpress 函数将 URL 参数添加到 iFrame
- ios - Unity + Xcode iOS Build - 缺少符号
- java - 如何使用 SearchView 在多个单词中进行搜索?