ORACLE PL/SQL存储过程插入和执行错误
我试图创建一个存储过程,将值插入EMPLOYEE表。 当我尝试使用值执行该过程时,它会抛出一个错误。请你帮忙好吗?先谢谢你 存储过程---- 执行命令--- 错误消息---- 桌子-----ORACLE PL/SQL存储过程插入和执行错误,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我试图创建一个存储过程,将值插入EMPLOYEE表。 当我尝试使用值执行该过程时,它会抛出一个错误。请你帮忙好吗?先谢谢你 存储过程---- 执行命令--- 错误消息---- 桌子----- 当然,您应该在大括号内的表名之后、values关键字之前列出所有列。并且必须按照插入值的顺序匹配列 但是,传递给过程的值的数量与声明的参数的数量不同 而且 以下方面存在问题: 员工的开始日期。开始日期%TYPE 员工中的结束日期。结束日期%类型 2015/02/022017/02/02 因此,2015/
- 当然,您应该在大括号内的表名之后、values关键字之前列出所有列。并且必须按照插入值的顺序匹配列
- 但是,传递给过程的值的数量与声明的参数的数量不同
- 而且
因此,
2015/02/02
和2017/02/02
不是日期。你应该通过约会
要插入日期值,请始终使用格式正确的日期
使用将参数值传递到\u DATE:
EXECUTE create_emp(58, 'John', 'Testy', 'Here Lane', 'Himble', 'UK', 'Skipper',
TO_DATE('2015/02/02','YYYY/MM/DD'), TO_DATE('2017/02/02','YYYY/MM/DD'));
错误消息显示:
PLS-00306:调用“CREATE_EMP”时参数的数量或类型错误
我已将您给定的参数映射到方法所需的参数:
empid = 58
firstname = 'John'
surname = 'Testy'
address = 'Here Lane'
city = 'Himble'
county
postcode
country = 'UK'
jobtitle = 'Skipper'
startdate = 2015/02/02
enddate = 2017/02/02
因为没有参数具有默认值,所以正如错误消息所说,您只需在调用中错过2个参数
编辑:我找到了解决方案: 在匿名块中执行
CREATE_EMP
。这对我起了作用:
begin
CREATE_EMP(58, 'John', 'Testy', 'Here Lane', 'Himble', 'Abc','1225', 'UK', 'Skipper', TO_DATE('2015/02/02','YYYY/MM/DD'), TO_DATE('2017/02/02','YYYY/MM/DD'));
end;
这是数据库创建和CREATE\u EMP
定义:
CREATE TABLE EMPLOYEE (
EMP_ID NUMBER(8,0),
FIRST_NAME VARCHAR2(30),
SURNAME VARCHAR2(30),
ADDRESS VARCHAR2(50),
CITY VARCHAR2(30),
COUNTY_STATE VARCHAR2(30),
POSTCODE_ZIP VARCHAR2(10),
COUNTRY VARCHAR2(5),
JOB_TITLE VARCHAR2(20),
START_DATE DATE,
END_DATE DATE
);
//
create or replace PROCEDURE CREATE_EMP
(
empid IN EMPLOYEE.EMP_ID%TYPE,
firstname IN EMPLOYEE.FIRST_NAME%TYPE,
surname IN EMPLOYEE.SURNAME%TYPE,
address IN EMPLOYEE.ADDRESS%TYPE,
city IN EMPLOYEE.CITY%TYPE,
county IN EMPLOYEE.COUNTY_STATE%TYPE,
postcode IN EMPLOYEE.POSTCODE_ZIP%TYPE,
country IN EMPLOYEE.COUNTRY%TYPE,
jobtitle IN EMPLOYEE.JOB_TITLE%TYPE,
startdate IN EMPLOYEE.START_DATE%TYPE,
enddate IN EMPLOYEE.END_DATE%TYPE)
AS
BEGIN
INSERT INTO EMPLOYEE
(EMP_ID, FIRST_NAME, SURNAME, ADDRESS, CITY, COUNTY_STATE, POSTCODE_ZIP, COUNTRY, JOB_TITLE, START_DATE, END_DATE)
VALUES
(empid, firstname, surname, address, city, county, postcode, country, jobtitle, startdate, enddate);
END CREATE_EMP;
to_date
函数,即:使用to_date('2015/02/02','YYYY/MM/DD')
而不是2015/02/02
(1) Oracle错误提示Oracle,因此我删除了SQL Server标记。(2) 使用
insert
时,列出表名后面的所有列。这不会解决您的问题,但这是一个很好的做法。2015/02/02
和2017/02/02
不是日期。谢谢您的输入,但不幸的是,它没有起作用:(抛出此错误)。错误起始于命令中的第2行-截止日期('2015/02/02','YYYY/MM/DD'),截止日期('2017/02/02','YYYY/MM/DD)错误报告-未知命令“您好,谢谢您的输入,我添加了更多内容,但仍会显示相同的错误消息:/很抱歉,这没用。您能从表中找到列类型吗?我认为Lalit的回答显示了继续寻找修复的好方法,即使他目前的状态没有帮助。我想可能是某种类型的不匹配在第一次查看时并不明显。我已经在正文中添加了它们。:)
EXECUTE create_emp(58, 'John', 'Testy', 'Here Lane', 'Himble', 'UK', 'Skipper',
TO_DATE('2015/02/02','YYYY/MM/DD'), TO_DATE('2017/02/02','YYYY/MM/DD'));
empid = 58
firstname = 'John'
surname = 'Testy'
address = 'Here Lane'
city = 'Himble'
county
postcode
country = 'UK'
jobtitle = 'Skipper'
startdate = 2015/02/02
enddate = 2017/02/02
begin
CREATE_EMP(58, 'John', 'Testy', 'Here Lane', 'Himble', 'Abc','1225', 'UK', 'Skipper', TO_DATE('2015/02/02','YYYY/MM/DD'), TO_DATE('2017/02/02','YYYY/MM/DD'));
end;
CREATE TABLE EMPLOYEE (
EMP_ID NUMBER(8,0),
FIRST_NAME VARCHAR2(30),
SURNAME VARCHAR2(30),
ADDRESS VARCHAR2(50),
CITY VARCHAR2(30),
COUNTY_STATE VARCHAR2(30),
POSTCODE_ZIP VARCHAR2(10),
COUNTRY VARCHAR2(5),
JOB_TITLE VARCHAR2(20),
START_DATE DATE,
END_DATE DATE
);
//
create or replace PROCEDURE CREATE_EMP
(
empid IN EMPLOYEE.EMP_ID%TYPE,
firstname IN EMPLOYEE.FIRST_NAME%TYPE,
surname IN EMPLOYEE.SURNAME%TYPE,
address IN EMPLOYEE.ADDRESS%TYPE,
city IN EMPLOYEE.CITY%TYPE,
county IN EMPLOYEE.COUNTY_STATE%TYPE,
postcode IN EMPLOYEE.POSTCODE_ZIP%TYPE,
country IN EMPLOYEE.COUNTRY%TYPE,
jobtitle IN EMPLOYEE.JOB_TITLE%TYPE,
startdate IN EMPLOYEE.START_DATE%TYPE,
enddate IN EMPLOYEE.END_DATE%TYPE)
AS
BEGIN
INSERT INTO EMPLOYEE
(EMP_ID, FIRST_NAME, SURNAME, ADDRESS, CITY, COUNTY_STATE, POSTCODE_ZIP, COUNTRY, JOB_TITLE, START_DATE, END_DATE)
VALUES
(empid, firstname, surname, address, city, county, postcode, country, jobtitle, startdate, enddate);
END CREATE_EMP;