PL / SQL过程语句忽略错误

时间:2012-01-15 16:06:46

标签: oracle plsql

我正在从网站http://www.plsqltutorial.com/plsql-procedure/做教程。我在apex上运行了代码:

CREATE OR REPLACE PROCEDURE adjust_salary(
    in_employee IN EMPLOYEES.EMPLOYEE_ID%TYPE,
    in_percent IN NUMBER
) IS
BEGIN
    UPDATE EMPLOYEES
    SET salary = salary + salary * in_percent / 100
    WHERE employee_id = in_employee_id;
END;

但我收到了错误:

Error at line 6: PL/SQL: SQL Statement ignored

4. ) IS
5. BEGIN
6.  UPDATE EMPLOYEES
7.  SET salary = salary + salary * in_percent / 100
8.  WHERE employee_id = in_employee_id;

我已经检查过并且员工在那里。有什么问题以及如何解决?

5 个答案:

答案 0 :(得分:3)

  

WHERE employee_id = in_employee_id;

in_employee_id未声明,也不是参数。函数定义表示参数为in_employee,因此您的代码块应为

CREATE OR REPLACE PROCEDURE adjust_salary(
    in_employee IN EMPLOYEES.EMPLOYEE_ID%TYPE,
    in_percent IN NUMBER
) IS
BEGIN
    UPDATE EMPLOYEES
    SET salary = salary + salary * in_percent / 100
    WHERE employee_id = in_employee;
END;

看一下这篇文章,我看到你在创建函数时犯了一个拼写错误,根据文章的函数声明是

 CREATE OR REPLACE PROCEDURE adjust_salary(
    in_employee_id IN EMPLOYEES.EMPLOYEE_ID%TYPE,

因此,如果您将代码更改为上述代码,则更新语句不需要进行任何更改。

答案 1 :(得分:2)

参数为in_employee,但您在更新中使用in_employee_id。改为:

CREATE OR REPLACE PROCEDURE adjust_salary(
    in_employee IN EMPLOYEES.EMPLOYEE_ID%TYPE,
    in_percent IN NUMBER
) IS
BEGIN
    UPDATE EMPLOYEES
    SET salary = salary + salary * in_percent / 100
    WHERE employee_id = in_employee;
END;

答案 2 :(得分:2)

为避免此类错别字,最好使用Dot Notation(或名称空间)代替前缀。在过程的上下文中,这是过程的名称。

查看以下代码:

create or replace procedure adjust_salary(
    employee_id hr.employees.employee_id%type, percent number) is
begin
    update hr.employees set 
        salary = salary + salary * percent / 100
    where employee_id = adjust_salary.employee_id;
end;
/
Procedure ADJUST_SALARY compiled

答案 3 :(得分:0)

在查询中使用不同的变量名称“ in_employee_id”时,参数名称“ in_employee”不同

CREATE OR REPLACE PROCEDURE adjust_salary(
in_employee IN EMPLOYEES.EMPLOYEE_ID%TYPE,
in_percent IN NUMBER

)是 开始 更新员工 SET工资=工资+工资* in_percent / 100 WHERE employee_id = in_employee; END;

答案 4 :(得分:0)

就我而言(Oracle SQL Developer 19.2,Oracle 版本 12c),我只需要保存过程,错误就消失了。

例如,输入一些键,删除它(过程没有改变,但现在您可以使用Ctrl+s保存它)。保存后错误消失,我能够运行该程序。