Plsql 函数计算PL/SQL中的增量

Plsql 函数计算PL/SQL中的增量,plsql,Plsql,我有下面的代码,创建一个函数来计算员工的增量。函数将增量百分比和工资作为输入,并返回增量金额作为输出- create or replace function calculate_Increment(incperc number, salary number) return number is begin insert into employee(emp_id, emp_name, salary, calculate_Increment(10, salary)) values (emp_id, e

我有下面的代码,创建一个函数来计算员工的增量。函数将增量百分比和工资作为输入,并返回增量金额作为输出-

create or replace function calculate_Increment(incperc number, salary number)
return number
is
begin
insert into employee(emp_id, emp_name, salary, calculate_Increment(10, salary))
values (emp_id, emp_name, salary, v_increment_amount);
end;
/
预期产量为-

  EMPID      EMPNAME              SALARY     CALCULATE_INCREMENT(10,SALARY)
---------- ------------------------- ---------- ------------------------------
       101   Ram                  45000               4500
       102   Sita             54000               5400
       103   Gandhi           35000               3500
       104   Indira           48000               4800
       105   Cholan           25000               2500
但我面临一个错误-

Warning: Function created with compilation errors.
Select empid, empname, salary, calculate_Increment(10, salary) from employee
                               *
ERROR at line 1:
ORA-06575: Package or function CALCULATE_INCREMENT is in an invalid state

请帮我纠正这个错误。提前感谢。

您编写的函数无效,原因如下:

  • 它不会返回任何东西
  • 您不能在内部执行DML(好的,如果它是一个自治事务,您可以,但是-让我们别管它)
  • insert
    本身没有意义;它应该是什么?无法插入到由函数表示的列中
如果我没弄错的话,那么你应该按照以下步骤来做:

SQL> create or replace function calculate_increment
  2    (incperc in number,
  3     salary  in number
  4    )
  5  return number
  6  as
  7  begin
  8    return salary * incperc/100;
  9  end;
 10  /

Function created.

SQL> select emp_id, emp_name, salary, calculate_increment(10, salary) inc
  2  from employee;

    EMP_ID EMP_NAME       SALARY        INC
---------- ---------- ---------- ----------
      7782 CLARK            2450        245
      7839 KING             5000        500
      7934 MILLER           1300        130

SQL>

创建一个表值函数,通过提供加薪百分比,使用员工id增加员工的工资。如果提供了ID,您的职能部门必须能够增加单个员工的工资,否则如果没有提供ID,则您的职能部门应增加所有员工的工资

您在哪里增加工资?为什么需要函数来插入行?要求不明确。加薪是在职能部门完成的。那么仅仅调用函数就可以得到输出?如果是,我如何调用函数?函数在哪里?你能给我看看吗?如果函数存在,只需根据需要将其与其他列一起选择即可?在回答任何问题之前,我想先了解一下这个函数是“calculate_increment”创建的。很抱歉,我完全搞糊涂了。虽然你的函数有错误,但我能告诉你什么。1.您不应该将函数用于插入目的。2.您没有返回条款3。您正在使用变量
v_increment_amount
,但没有声明它4。您当前的代码将导致递归调用,而没有任何退出条件,这将导致无限循环……简而言之,如果您可以一步一步地告诉我您真正想要什么,我可以帮助您,否则我的坏消息我不理解您。