首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

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

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

热点排行