插入oracle中的返回ID

时间:2017-09-22 15:51:54

标签: oracle

我在sp中有一个INSERT的包,我想返回该插入的id。该表有一个序列和一个标识的触发器,但在sp中我不知道如何返回我正在做的插入的id,因为在代码java中我需要使用它。

CREATE OR REPLACE PACKAGE BODY PLUSALT.INSERTAR
IS
PROCEDURE INSERTAR_ESTRATEGIA(
    P_USUARIO     IN VARCHAR2,
    P_CAMPAÑA     IN NUMBER,
    P_FKPLANTILLA IN NUMBER,
    P_NOMBRE      IN VARCHAR2)
IS
BEGIN
  INSERT
  INTO ESTRATEGIA VALUES
    (
      NULL,
      P_CAMPAÑA,
      P_USUARIO,
      P_FKPLANTILLA,
      P_NOMBRE,
      NULL,
      SYSDATE,
      1,
      'Y'
    );
END;
END;
/

这是表

CREATE TABLE ESTRATEGIA
(
    ESID               NUMBER(25) NOT NULL,
    FK_CAMPAÑA         NUMBER(5) NOT NULL,
    FK_USUARIO         NUMBER(8) NOT NULL,
    FK_PLANTILLAESTRA  NUMBER(8),
    ESNOMBRE           VARCHAR2(100),
    ESDESCRIPCION      VARCHAR2(300),
    ESFCHCREACION      DATE,
    FKESTADO           NUMBER(3) NOT NULL,
    ESACTIVA           CHAR(1)
)
;

序列

CREATE SEQUENCE ESTRATEGIA_SEC
START WITH 1 
INCREMENT BY 1 
NOMAXVALUE; 

触发器

CREATE TRIGGER TRIG_ESTRATEGIA
  BEFORE INSERT ON ESTRATEGIA
  FOR EACH ROW
  BEGIN
    SELECT ESTRATEGIA_SEC.nextval INTO :new.ESID FROM dual;
  END
;

2 个答案:

答案 0 :(得分:1)

使用OUT参数在插入中使用RETURNING INTO。在java代码中使用此参数P_ESID

CREATE OR REPLACE PACKAGE BODY PLUSALT.INSERTAR
IS
PROCEDURE INSERTAR_ESTRATEGIA(
    P_USUARIO     IN VARCHAR2,
    P_CAMPAÑA     IN NUMBER,
    P_FKPLANTILLA IN NUMBER,
    P_NOMBRE      IN VARCHAR2,
    P_ESID        OUT NUMBER)
IS
BEGIN
  INSERT
  INTO ESTRATEGIA VALUES
    (
      NULL,
      P_CAMPAÑA,
      P_USUARIO,
      P_FKPLANTILLA,
      P_NOMBRE,
      NULL,
      SYSDATE,
      1,
      'Y'
    ) RETURNING ESID INTO P_ESID ;
END;
END;
/

答案 1 :(得分:0)

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/returninginto_clause.htm

快速演示。

SQL> create table t (id int);

Table created.

SQL> create sequence s;

Sequence created.

SQL> var x number
SQL> insert into t values(s.nextval) returning id into :x;

1 row created.

SQL> print x

         X
----------
         1