PL/SQL存储过程

PL/SQL存储过程,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,请帮助我了解此存储过程的语法?这是在oracle的SQL developer内部完成的 存储过程的目的是允许调用函数将新记录插入到类表中(使用以下语法创建): 使用下面编码的存储过程和序列,应创建一个新类,如果结束日期早于开始日期,则默认情况下结束日期应为开始日期+两周 CREATE SEQUENCE class_number_seq; CREATE OR REPLACE PROCEDURE insert_class ( Teacher_name_param class.teacher_

请帮助我了解此存储过程的语法?这是在oracle的SQL developer内部完成的

存储过程的目的是允许调用函数将新记录插入到类表中(使用以下语法创建):

使用下面编码的存储过程和序列,应创建一个新类,如果结束日期早于开始日期,则默认情况下结束日期应为开始日期+两周

CREATE SEQUENCE class_number_seq;

 CREATE OR REPLACE PROCEDURE insert_class
(
  Teacher_name_param class.teacher_name%TYPE,
  class_name_param class.class_name%type,
  start_date_param class.start_date%TYPE ,
  end_date_param class.end_date%TYPE,
  class_category_param class.class_category%TYPE,
  topic_param class.topic%TYPE,
  end_date_param class.end_date%TYPE
  )
  AS 
      class_number_var class.class_number%TYPE;
      end_date_var class.end_number%TYPE;


BEGIN
   SELECT class_number_seq.NEXTVAL INTO class_number_var FROM dual;

   IF end_date_param < start_date_param OR end_date_param IS NULL THEN
     end_date_param := start_date_param + 14; 
    ELSE
      end_date_var := end_date_param;
    END IF;
   INSERT INTO class
   VALUES(class_number_var, teacher_name_param, class_name_param, start_date_param, end_date_param, class_category_param, topic_param);
    END;
创建序列类\u编号\u seq;
创建或替换过程插入类
(
教师名称参数类。教师名称%TYPE,
类名称参数类。类名称%type,
开始日期参数类。开始日期%TYPE,
结束日期参数类。结束日期%TYPE,
class\u category\u param class.class\u category%类型,
主题参数类。主题%TYPE,
结束日期参数类。结束日期%TYPE
)
作为
类别编号变量类别。类别编号%TYPE;
结束日期变量类。结束编号%TYPE;
开始
从dual中选择class_number_seq.NEXTVAL进入class_number_var;
如果结束日期参数<开始日期参数或结束日期参数为空,则
结束日期参数:=开始日期参数+14;
其他的
结束日期变量:=结束日期参数;
如果结束;
插入到类中
值(班级编号变量、教师姓名参数、班级名称参数、开始日期参数、结束日期参数、班级类别参数、主题参数);
结束;
我得到的错误是:

PL/SQL编译单元分析已终止,并且:中的字段重复 不允许列出记录、表格或参数

我不确定我的逻辑是否有问题,或者重复字段在哪里


救命啊

结束日期参数类。结束日期%TYPE
在过程的参数列表中列出两次。删除其中一个应该可以修复此错误


创建或替换过程插入类
(
教师名称参数类。教师名称%TYPE,
类名称参数类。类名称%type,
开始日期参数类。开始日期%TYPE,
结束日期参数类。结束日期%TYPE,
class\u category\u param class.class\u category%类型,
主题参数类。主题%TYPE,
结束日期参数类。结束日期%TYPE
)

我想下面这行有一个拼写错误


结束日期变量类。结束日期%TYPE;

以下语句可能会导致错误,因为end_date_param未声明为OUT参数。因此,这里的end_date_参数可能应该更改为end_date_var


如果结束日期参数<开始日期参数或结束日期参数为空,则
结束日期参数:=开始日期参数+14;
其他的

insert语句提供7个值,而表有8列

INSERT INTO class
VALUES(class_number_var, teacher_name_param, class_name_param,
start_date_param, end_date_param, class_category_param, topic_param);
这可能会导致错误值太少

通常最好将其写为

INSERT INTO class
(class_number, teacher_name, class_name, 
 start_date, end_date, class_category, topic)
VALUES(class_number_var, teacher_name_param, class_name_param,
 start_date_param, end_date_param, class_category_param, topic_param);

因此,我们可以轻松地验证并避免错误。

结束日期参数类。结束日期%TYPE
在过程的参数列表中列出两次。删除其中一个应该可以修复此错误


创建或替换过程插入类
(
教师名称参数类。教师名称%TYPE,
类名称参数类。类名称%type,
开始日期参数类。开始日期%TYPE,
结束日期参数类。结束日期%TYPE,
class\u category\u param class.class\u category%类型,
主题参数类。主题%TYPE,
结束日期参数类。结束日期%TYPE
)

我想下面这行有一个拼写错误


结束日期变量类。结束日期%TYPE;

以下语句可能会导致错误,因为end_date_param未声明为OUT参数。因此,这里的end_date_参数可能应该更改为end_date_var


如果结束日期参数<开始日期参数或结束日期参数为空,则
结束日期参数:=开始日期参数+14;
其他的

insert语句提供7个值,而表有8列

INSERT INTO class
VALUES(class_number_var, teacher_name_param, class_name_param,
start_date_param, end_date_param, class_category_param, topic_param);
这可能会导致错误值太少

通常最好将其写为

INSERT INTO class
(class_number, teacher_name, class_name, 
 start_date, end_date, class_category, topic)
VALUES(class_number_var, teacher_name_param, class_name_param,
 start_date_param, end_date_param, class_category_param, topic_param);
因此,我们可以轻松地验证并避免错误