读书人

PL/SQL关于安插和更新的操作

发布时间: 2013-04-09 16:45:09 作者: rapoo

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去除,就不会执行员工信息的插入了

读书人网 >oracle

热点推荐