首页 > 解决方案 > oracle sql:“获取或插入”存储过程

问题描述

我想做一个接收输入参数的存储过程,然后

目前我只在输入参数是新的时才设法插入新行:

--exemple of table with a primary id a column with value
create table unique_number_table  (
 id             NUMBER(12)   not null,
 UNIQUE_NUMBER VARCHAR2(80)  not null,

 constraint PK_ID primary key (ID)
);

    create sequence SEQ_NUMBER
    INCREMENT BY 1
    START WITH 2
    MAXVALUE 999999999 
    MINVALUE 0; 

   create or replace procedure insert_or_get_unique_number ( input_number in varchar ) is     
    begin 
    insert into unique_number_table (id, UNIQUE_NUMBER) 
    select SEQ_NUMBER.NEXTVAL ,input_number
    from dual
    where not exists(select *  from unique_number_table 
                 where UNIQUE_NUMBER =input_number);   
     end insert_or_get_unique_number;

你知道怎么做吗?

标签: sqloraclestored-procedures

解决方案


在我看来,你想要一个存储函数而不是一个过程。

create or replace function insert_or_get_unique_number (input_number varchar2)
   return UNIQUE_NUMBER_TABLE.ID%type
is
  L_NUM  UNIQUE_NUMBER_TABLE.ID%type;
begin
   select ID
     into L_NUM
     from UNIQUE_NUMBER_TABLE
    where UNIQUE_NUMBER = input_number;
   return L_NUM;
exception
   when NO_DATA_FOUND then
      insert into unique_number_table (id, UNIQUE_NUMBER)
      values (SEQ_NUMBER.NEXTVAL, input_number)
      returning ID into L_NUM;
      return L_NUM;
end insert_or_get_unique_number;

推荐阅读