如何修复“在预期以下情况之一时遇到符号“=”:plsql中的错误

Posted

技术标签:

【中文标题】如何修复“在预期以下情况之一时遇到符号“=”:plsql中的错误【英文标题】:How to fix 'Encountered the symbol "=" when expecting one of the following:' error in plsql 【发布时间】:2019-04-04 14:50:22 【问题描述】:

我正在尝试使用 PL/SQL 过程从表中获取结果

这是程序

CREATE OR REPLACE PROCEDURE getEmpById(
       e_id IN employee.empid%TYPE,
       emp_name OUT employee.empname%TYPE,
       emp_desig OUT  employee.designation%TYPE)
IS
BEGIN
  SELECT empname,designation INTO emp_name, emp_desig FROM employee WHERE empid = e_id;
END;
/

这是调用块

DECLARE
   e_id:=&e_id;
   emp_name employee.empname%TYPE;
   emp_desig employee.designation%TYPE;
BEGIN
   getEmpById(e_id,emp_name,emp_desig);
   DBMS_OUTPUT.PUT_LINE('Name :  ' || emp_name);
   DBMS_OUTPUT.PUT_LINE('Designation :  ' || emp_desig);   
END;
/

这是我得到的错误

Enter value for e_id: 'AIT005'
old   2:    e_id:=&e_id;
new   2:    e_id:='AIT005';
   e_id:='AIT005';
       *
ERROR at line 2:
ORA-06550: line 2, column 8:
PLS-00103: Encountered the symbol "=" when expecting one of the following:
constant exception <an identifier>
<a double-quoted delimited-identifier> table LONG_ double ref
char time timestamp interval date binary national character
nchar
The symbol "<an identifier>" was substituted for "=" to continue.

【问题讨论】:

你能看出你声明e_id和你声明emp_nameemp_desig之间的区别吗? @apc e_id 是过程中的变量名,而 empid 是表中的列名,这就是区别 这应该不会导致任何问题......但是虽然我用相同的名称进行了检查,但也发生了同样的错误 我的意思是,emp_nameemp_desig 的声明包含数据类型,而您的 e_id 声明没有。我鼓励你重新阅读你的代码并自己发现错误,但似乎你需要@littlefoot 指出它。要成为一名优秀的程序员,您必须具备的一项重要技能是能够以冷静的眼光阅读自己的代码。您根本无法将您编写的所有内容都发布到该站点,并希望某个好心的陌生人为您调试它。 因此,为了将来参考,每当 Oracle 抛出 PLS-00103: Encountered the symbol ... when expecting one of the following: 时,这意味着您的代码包含语法错误。因此,请查看指示行中的代码 - ERROR at line 2: - 看看有什么问题。有时语法错误会出现在前一行或后一行,但它总是锚定在 Oracle 给你的那一行。 【参考方案1】:

您缺少 E_ID 的数据类型(在 DECLARE 部分中)。

这是一个例子:

SQL> create table employee (empid number, empname varchar2(10), designation varchar2(10));

Table created.

SQL> insert into employee values (1, 'Little', 'Foot');

1 row created.

SQL> create or replace procedure getempbyid(
  2         e_id in employee.empid%type,
  3         emp_name out employee.empname%type,
  4         emp_desig out  employee.designation%type)
  5  is
  6  begin
  7    select empname,designation into emp_name, emp_desig from employee where empid = e_id;
  8  end;
  9  /

Procedure created.

测试:

SQL> set serveroutput on
SQL> set ver off
SQL> declare
  2     e_id employee.empid%type := &e_id;     --> you're missing E_ID datatype here
  3     emp_name employee.empname%type;
  4     emp_desig employee.designation%type;
  5  begin
  6     getempbyid(e_id,emp_name,emp_desig);
  7     dbms_output.put_line('Name :  ' || emp_name);
  8     dbms_output.put_line('Designation :  ' || emp_desig);
  9  end;
 10  /
Enter value for e_id: 1
Name :  Little
Designation :  Foot

PL/SQL procedure successfully completed.

SQL>

【讨论】:

以上是关于如何修复“在预期以下情况之一时遇到符号“=”:plsql中的错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:PLS-00103:在预期以下情况之一时遇到符号“)”

ORA-06550 第 10 行,第 41 列:PLS-00103:在预期以下情况之一时遇到符号“,”:

在预期以下情况之一时遇到符号“文件结尾”

PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;

在预期以下情况之一时遇到符号“INTO”

为啥我会收到此错误? PLS-00103:在预期以下情况之一时遇到符号“CREATE”: