Oracle sql - 创建过程的错误

问题描述 投票:0回答:2

我已经创建了这个程序

create or replace procedure enrollstudent(
    rno in STUDENTS.ROLL_NUMBER%type,
    sname in STUDENTS.STUDENT_NAME%type,
    cid in STUDENTS.COURSEID%type,
    cfees in STUDENTS.FEES%type,
    spercent in students.percentage%type
)as 
    discount number;
begin 
    discount := spercent*5;
    cfees := cfees-discount;
    insert into STUDENTS values(rno, sname, cid, cfees, spercent);
    commit;
end;

适用于此表

CREATE TABLE STUDENTS(
    ROLL_NUMBER  NUMBER(20)   NOT NULL,
    STUDENT_NAME VARCHAR2(25) NOT NULL,
    COURSEID     NUMBER(20)   NOT NULL,
    FEES         NUMBER(20)           ,
    PERCENTAGE   NUMBER(20)
);

当我运行程序创建时,我有一个Procedure ENROLLSTUDENT compiled并且它被创建但我在编译器日志中有以下错误

Error(8,1): PL/SQL: Statement ignored
Error(8,1): PLS-00363: expression 'CFEES' cannot be used as an assignment target

如果我尝试使用一些数据运行该程序,我很简单就有PLS-00905: object [schema].ENROLLSTUDENT is invalid

sql oracle plsql
2个回答
2
投票

CFEES是IN参数。你无法改变它。创建一个局部变量,并使用它,例如:

cfees2 NUMBER := cfees;
cfees2 := cfees2 - discount;
insert into STUDENTS values(rno, sname, cid, cfees2, spercent);

0
投票

您不需要定义和计算任何局部变量;你可以在适当的位置计算cfees(在INSERT声明中):

create or replace procedure enrollstudent(
    rno in STUDENTS.ROLL_NUMBER%type,
    sname in STUDENTS.STUDENT_NAME%type,
    cid in STUDENTS.COURSEID%type,
    cfees in STUDENTS.FEES%type,
    spercent in students.percentage%type
)as
begin 
    insert into STUDENTS values(rno, sname, cid, cfees-spercent*5, spercent);
    commit;
end;
/
© www.soinside.com 2019 - 2024. All rights reserved.