oracle – 检查INSERT是否成功

前端之家收集整理的这篇文章主要介绍了oracle – 检查INSERT是否成功前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些执行INSERT语句的过程:

CREATE OR REPLACE PROCEDURE potok_insert(
  p_jfplate IN potok.jfplate%TYPE,p_post IN potok.post%TYPE,p_jfchan IN potok.jfchan%TYPE,p_jfdatetime IN VARCHAR2 
  ) 
AS 
  t_jfdatetime TIMESTAMP:=TO_TIMESTAMP(p_jfdatetime,'DD.MM.YYYY HH24:MI:SS');
BEGIN
  INSERT INTO potok (jfplate,post,jfchan,jfdate_y,jfdate_m,jfdate_d,jftime,jfdatetime,dt_reg,ibd_arx)
      VALUES (RTRIM(p_jfplate),p_post,RTRIM(p_jfchan),EXTRACT(YEAR FROM t_jfdatetime),EXTRACT(MONTH FROM t_jfdatetime),EXTRACT(DAY FROM t_jfdatetime),LPAD(EXTRACT(HOUR FROM t_jfdatetime),2,'0')||':'||
        LPAD(EXTRACT(MINUTE FROM t_jfdatetime),'0')||':'||
        LPAD(EXTRACT(SECOND FROM t_jfdatetime),'0'),CAST(t_jfdatetime AS DATE),SYSDATE,1);  
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
END potok_insert;

一些触发器和约束可以应用于表,它们可以
INSERT.
我如何检查程序正文 – 如果INSERT成功与否?

当然我可以在头部和程序结束时调用count(),但这不是那么优雅的解决方案.

解决方法

您可以使用RETURNING子句返回刚刚创建的行的rowid,如下所示:

CREATE SEQUENCE seq_emp;

set serveroutput on

DECLARE
 x emp.empno%TYPE;
BEGIN
  INSERT INTO emp
  (empno,ename)
  VALUES
  (seq_emp.NEXTVAL,'Morgan')
  RETURNING empno
  INTO x;

  dbms_output.put_line(x);
END;
/

DECLARE
 r rowid;
BEGIN
  INSERT INTO emp
  (empno,'Morgan')
  RETURNING rowid
  INTO r;

  dbms_output.put_line(r);
END;
/

DECLARE
 x emp.empno%TYPE;
 r rowid;
BEGIN
  INSERT INTO emp
  (empno,'Morgan')
  RETURNING rowid,empno
  INTO r,x;

  dbms_output.put_line(r); 
  dbms_output.put_line(x);
END;

取自此链接

http://www.psoug.org/reference/insert.html

猜你在找的Oracle相关文章