PL/SQL存储过程
请帮助我了解此存储过程的语法?这是在oracle的SQL developer内部完成的 存储过程的目的是允许调用函数将新记录插入到类表中(使用以下语法创建): 使用下面编码的存储过程和序列,应创建一个新类,如果结束日期早于开始日期,则默认情况下结束日期应为开始日期+两周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_
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);
因此,我们可以轻松地验证并避免错误