当前位置: 首页 > 知识库问答 >
问题:

错误用户输入PLS-00201:必须声明标识符“ISS”[重复]

公孙森
2023-03-14

为什么会出现这个错误?如果变量声明与列的类型相同,则不应该这样做。nursing_unit_id是varchar2(10)。当ID是NUMBER时,它对我来说是这样工作的;

我得到的错误:错误报告-ORA-06550:第13行,第13列:PLS-00201:必须声明标识符“ISS”

SET SERVEROUTPUT ON;
DECLARE
v_unit ADMISSIONS.NURSING_UNIT_ID%TYPE := &v_unit;
v_admissions ADMISSIONS%ROWTYPE;

CURSOR c_admissions IS
  SELECT *
  INTO v_admissions
  FROM ADMISSIONS
  WHERE NURSING_UNIT_ID = v_unit;

BEGIN
  FOR r_admissions IN c_admissions
  LOOP  
    DBMS_OUTPUT.PUT_LINE(r_admissions );
  END LOOP;
END;

共有1个答案

勾俊
2023-03-14

如果护理单元id是varchar2(10),并且您已经定义了替换变量

v_unit ADMISSIONS.NURSING_UNIT_ID%TYPE := '&v_unit';

如果您在SQL*Plus或SQLDeveloper中运行代码,并在上设置验证,您将看到该替换的前后值,这将显示它试图执行以下操作:

v_unit ADMISSIONS.NURSING_UNIT_ID%TYPE := ISS;

而不是引用你从中得到的:

v_unit ADMISSIONS.NURSING_UNIT_ID%TYPE := 'ISS';

您仍然会遇到其他错误;下一个是:

PLS-00306:调用“PUT\u LINE”时参数的数量或类型错误

您已经将v_admissions定义为行类型,这意味着它是一条记录。您不能用dbms_output一次性写出整条记录,您必须单独引用每个字段,例如(使用修改后的代码,其中'r_admissions也是隐式的相同行类型):

    DBMS_OUTPUT.PUT_LINE(r_admissions.nursing_unit_id);

在游标定义中有一个into子句是没有用的;它实际上没有填充,因此可以删除该子句和变量声明。您实际上也不需要v_单位,您可以直接使用替换变量;您可以使用各种光标形式,例如:

SET SERVEROUTPUT ON;
BEGIN 
  FOR r_admissions IN (
    SELECT *
    FROM ADMISSIONS
    WHERE NURSING_UNIT_ID = '&v_unit'
  )
  LOOP  
    DBMS_OUTPUT.PUT_LINE(r_admissions.nursing_unit_id);
    -- and anything else you want to do with that row's data
  END LOOP;
END;
/
 类似资料:
  • 所以我一直有这个错误,我不知道发生了什么。我在谷歌上搜索了一下,读了一些关于这个错误的问题,但什么都没用。我只想运行它,这样我就可以完成我的项目。 错误:开始低库存;结束;*第1行错误:ORA-06550:第1行,第9列:PLS-00201:标识符“LOWINVENTORY”必须声明ORA-06550:第1行,第7列:PL/SQL:忽略语句 编辑: 表创建:

  • 我正在使用SODA for Java存储和检索Oracle12c DB中的文档。我正在效仿这个例子。 这一例外背后的原因将是什么?

  • 安装在CentOS 8上。 已尝试两者 Oracle Database Express Edition (XE) 企业版 从这里 https://www.oracle.com/database/technologies/oracle-database-software-downloads.html ords.warhttps://www.oracle.com/database/technologi

  • 作为标题,我正在Oracle上编写一些存储过程,首先我检查了版本 有结果 ... 并尝试NVL2与常规SQL查询 结果似乎是对的 ... 所以我确认11g确实支持NLV2功能,我现在可以开始编写我的存储过程,如下所示: Oracle告诉我它编译有错误,即 PLS-00201:必须声明标识符“NVL2” 为什么函数在常规查询中工作,但在存储过程中变得未声明?

  • 这是我成功的存储过程 这是首先生成表的调用 最初,我试图用一些预定义的参数调用存储过程。 这导致错误“PLS-00201:标识符'B100'必须声明” 我是PL/SQL的新手,很难解决这个问题。我尝试添加DECLARE语句 这仍然会导致错误“PLS-00201:必须声明标识符‘B100’”,但它表示“PL/SQL:忽略语句”,然后表示“PLS-00201:必须声明标识符‘Steve’” 进一步挖掘