【发布时间】:2016-11-27 20:54:39
【问题描述】:
我已经创建了一个存储过程来更新 EMPLOYEE 表中员工的个人信息:
CREATE OR REPLACE PROCEDURE UPDATE_EMPLOYEE
(
THE_EMPLOYEEID IN NUMBER,
NEW_LASTNAME IN VARCHAR2,
NEW_FIRSTNAME IN VARCHAR2,
NEW_TITLE IN VARCHAR2,
NEW_REPORTSTO IN NUMBER,
NEW_BIRTHDATE IN DATE,
NEW_HIREDATE IN DATE,
NEW_ADDRESS IN VARCHAR2,
NEW_CITY IN VARCHAR2,
NEW_STATE IN VARCHAR2,
NEW_COUNTRY VARCHAR2,
NEW_POSTALCODE VARCHAR2,
NEW_PHONE VARCHAR2,
NEW_FAX VARCHAR2,
NEW_EMAIL VARCHAR2
)
AS
BEGIN
UPDATE EMPLOYEE
SET LASTNAME =
CASE NEW_LASTNAME
WHEN NULL THEN
LASTNAME
ELSE NEW_LASTNAME
END,
FIRSTNAME =
CASE NEW_FIRSTNAME
WHEN NULL THEN
FIRSTNAME
ELSE NEW_FIRSTNAME
END,
TITLE = NEW_TITLE,
REPORTSTO = NEW_REPORTSTO,
BIRTHDATE = NEW_BIRTHDATE,
HIREDATE = NEW_HIREDATE,
ADDRESS = NEW_ADDRESS,
CITY = NEW_CITY,
STATE = NEW_STATE,
COUNTRY = NEW_COUNTRY,
POSTALCODE = NEW_POSTALCODE,
PHONE = NEW_PHONE,
FAX = NEW_FAX,
EMAIL = NEW_EMAIL
WHERE EMPLOYEEID = THE_EMPLOYEEID;
END UPDATE_EMPLOYEE;
EMPLOYEEID、LASTNAME 和 FIRSTNAME 在表 EMPLOYEE 中不能为空。
我收到这条消息:
Connecting to the database ChinookDB.
ORA-01407: cannot update ("CHINOOK"."EMPLOYEE"."LASTNAME") to NULL
ORA-06512: at "CHINOOK.UPDATE_EMPLOYEE", line 21
ORA-06512: at line 34
Process exited.
Disconnecting from the database ChinookDB.
有人可以告诉我我做错了什么吗?
【问题讨论】:
-
了解您如何调用该过程也会有所帮助。例如:您似乎正在连接到不同的数据库。如果在该数据库中,在 CHINOOK 模式中,您有一个同名的过程,您可能正在使用“本地”版本,具体取决于您调用它的准确程度。可能的答案太多 - 了解您如何使用该程序将有助于缩小可能性。
标签: sql oracle stored-procedures plsql