PL/SQL关于安插和更新的操作
PL/SQL关于插入和更新的操作SET SERVEROUTPUT ONDECLAREv_Id INT:9v_Name NVARCHAR2(20):maomaoBEG
PL/SQL关于插入和更新的操作
SET SERVEROUTPUT ON;
DECLARE
v_Id INT:=9;
v_Name NVARCHAR2(20):='maomao';
BEGIN
--先更新已存在的记录
UPDATE scott.student SET NAME=v_Name WHERE ID=v_Id;
COMMIT;
DBMS_OUTPUT.PUT_LINE('student更新成功');
--判断如果未更新数据
IF SQL%NOTFOUND THEN
--则向员工表中插入员工记录
INSERT INTO scott.student VALUES(v_Id,v_Name);
COMMIT;
DBMS_OUTPUT.PUT_LINE('员工插入成功');
END IF;
--错误处理
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('插入员工表错误');
END;
为什么我更新一条原来有的记录,还会执行员工信息的插入操作呢?SQL%NOTFOUND这句话也不是很理解?小弟刚开始了解Oracle,希望各位大神多多指教。 oracle sql insert
[解决办法]SET SERVEROUTPUT ON;
DECLARE
v_Id INT:=9;
v_Name NVARCHAR2(20):='maomao';
BEGIN
--先更新已存在的记录
UPDATE scott.student SET NAME=v_Name WHERE ID=v_Id;
DBMS_OUTPUT.PUT_LINE('student更新成功');
--判断如果未更新数据
IF SQL%NOTFOUND THEN
--则向员工表中插入员工记录
INSERT INTO scott.student VALUES(v_Id,v_Name);
COMMIT;
DBMS_OUTPUT.PUT_LINE('员工插入成功');
END IF;
COMMIT;
--错误处理
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('插入员工表错误');
ROLLBACK;
END;
SQL%NOTFOUND要紧跟着你的update语句。
[解决办法]在执行一个SQL语句时,oracle都会创建一个隐性游标SQL。
SQL%NOTFOUND中的%NOTFOUND是游标的属性,表示最最近执行的sql语句没有影响任何一条数据。
你把更新学生表后的commit去除,就不会执行员工信息的插入了