2017-12-18 13 views
0

내가 프로 시저 생성을 실행하면 나는 Procedure ENROLLSTUDENT compiled이이 절차오라클 SQL - 프로 시저를 만드는 오류가

이 테이블

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) 
); 

와 함께 작동

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; 

을 만들었으며이 작성되는하지만, 컴파일러 로그에 다음과 같은 오류가 있습니다.

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

간단한 데이터가있는 ocedure PLS-00905: object [schema].ENROLLSTUDENT is invalid

답변

2

CFEES는 IN 매개 변수입니다. 너는 그것을 바꿀 수 없다. 로컬 변수, 예를 사용 만들기 : 당신은 어떤 지역 변수를 정의하고 계산 할 필요가 없습니다

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

을; (INSERT 문에서) cfees의 계산을 수행 할 수 있습니다.

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; 
/