我正在从网站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;
我已经检查过并且员工在那里。有什么问题以及如何解决?
答案 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保存它)。保存后错误消失,我能够运行该程序。