程序错误 - PLS-00103 遇到符号“>”

Posted

技术标签:

【中文标题】程序错误 - PLS-00103 遇到符号“>”【英文标题】:Procedure error - PLS-00103 Encountered the symbol ">" 【发布时间】:2021-04-10 10:12:23 【问题描述】:

我正在尝试学习 PLSQL,但在创建过程时遇到问题。

我要解决的任务是:创建一个检查佣金的程序。高于 0.35 的佣金只能为具有 15 年以上经验的员工输入。如果佣金较高或练习较低,则会打印错误。利用异常(Exception 和 Raise)来定义错误消息。

我写了这个,但是有一个错误:

PLS-00103 在期望以下之一时遇到符号 ">"::= 。 (@%;

create or replace PROCEDURE PROVIZIA(num in number) IS
employee_id number;
com_pct employees.commission_pct%type;
begin
select commission_pct into com_pct from employees where employee_id = num;
if PRAX(employee_id) > 15 then
com_pct > 0.35;
else PRAX(employee_id) < 15 then
com_pct < 0.35;
end if;
exception when com_pct > 0.35 and PRAX(employee_id) < 15 then
dbms_output.put_line('error');
raise;
end PROVIZIA;

你能告诉我哪里出错了吗?

谢谢。

【问题讨论】:

您希望com_pct &gt; 0.35; 做什么? com_pct 是一个变量,错误基本上是说它期待一个赋值。 &gt; 不是赋值运算符。您还没有定义要抛出的异常。从任务措辞中,我不太确定您是否应该检查现有佣金,或者为特定员工传递新的佣金值并在申请前对其进行验证 - 作为一种检查。 【参考方案1】:

假设这是一个测试用例(表和 prax 函数返回一些数字;我不知道是哪个以及为什么,所以我让它为员工 1 返回一个“无效”值):

SQL> create table employees as
  2  select 1 employee_id, 0.5 commission_pct from dual union all
  3  select 2, 0.2 from dual;

Table created.

SQL> create or replace function prax(par_empid in number) return number is
  2  begin
  3    return case when par_empid = 1 then 10
  4                else 50
  5           end;
  6  end prax;
  7  /

Function created.

SQL> select employee_id, commission_pct, prax(employee_id) prax_result
  2  from employees;

EMPLOYEE_ID COMMISSION_PCT PRAX_RESULT
----------- -------------- -----------
          1             ,5          10     --> this combination is invalid
          2             ,2          50     --> this is OK

SQL>

如果值“错误”则引发错误的过程;不做任何事情(因为你没有说在那种情况下该怎么做):

SQL> create or replace procedure provizia(num in number) is
  2    com_pct      employees.commission_pct%type;
  3    l_err        exception;
  4  begin
  5    select commission_pct
  6      into com_pct
  7      from employees
  8      where employee_id = num;
  9
 10    if com_pct > 0.35 and prax(num) < 15 then
 11       raise l_err;
 12    end if;
 13
 14  exception
 15    when l_err then
 16      raise_application_error(-20000, 'Error');
 17  end provizia;
 18  /

Procedure created.

SQL>

让我们测试一下:

SQL> exec provizia(num => 1);
BEGIN provizia(num => 1); END;

*
ERROR at line 1:
ORA-20000: Error
ORA-06512: at "SYS.PROVIZIA", line 16
ORA-06512: at line 1


SQL> exec provizia(num => 2);

PL/SQL procedure successfully completed.

SQL>

现在您有了一个工作示例,请随意改进它。

【讨论】:

非常感谢你们,现在可以使用了 :)【参考方案2】:

com_ptc > 0.35 你不能这样写。它返回你是真还是假。 查看给定的像素。 如果您使用 TOAD.exe,那么您将通知运行时错误。 查看标记区域。

让我们试试这个

CREATE OR REPLACE PROCEDURE PROVIZIA (num IN NUMBER)
IS
   employee_id   NUMBER;
   com_pct       employees.commission_pct%TYPE;
BEGIN
   SELECT commission_pct
     INTO com_pct
     FROM employees
    WHERE employee_id = num;

   IF com_pct > 0.35 AND PRAX (employee_id) < 15
   THEN
      DBMS_OUTPUT.put_line ('error');
   ELSE
      DBMS_OUTPUT.put_line ('OK');
   END IF;
END PROVIZIA;

【讨论】:

以上是关于程序错误 - PLS-00103 遇到符号“>”的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 函数错误 - PLS-00103:遇到符号“IS”

PLS-00103 在 CASE 中遇到符号“”错误 [关闭]

错误(30,11):PLS-00103:遇到符号更新错误

获取 PLS-00103:在创建包时遇到符号“/”错误

PLS-00103 遇到符号“数字”

PLS-00103:预期时遇到符号“(”