Sql 创建更新员工个人信息的存储过程
我已执行以下操作来创建一个存储过程,用于更新employee表中员工的个人信息:Sql 创建更新员工个人信息的存储过程,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,我已执行以下操作来创建一个存储过程,用于更新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,
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.
有人能告诉我我做错了什么吗 如果传入
NULL
值,我假设您希望忽略new\u firstname
和new\u lastname
参数。如果是这样,那么您的案例
陈述是错误的
CASE NEW_LASTNAME
WHEN NULL THEN
LASTNAME
ELSE NEW_LASTNAME
END,
将始终返回new\u lastname
。任何值,包括NULL
都不等于NULL
,因此在NULL
时总是计算为false
。你可以这样做
CASE WHEN new_lastname IS NULL
THEN lastname
ELSE new_lastname
END
或者更简单地说
COALESCE( new_lastname, lastname )
当然,
new\u firstname
表达式也有同样的问题。了解如何调用过程也会有所帮助。例如:您似乎正在连接到另一个数据库。如果在该数据库中,在CHINOOK模式中,您有一个同名的过程,那么您可能正在使用“本地”版本,具体取决于您如何调用它。太多可能的答案-知道你是如何使用程序将有助于缩小可能性。