暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从Oracle存储过程触发时,Oracle identity列无法生成自动值

ASKTOM 2021-02-05
480

问题描述

我正在使用Oracle 12C。

到目前为止,我所有的存储过程都在过去的6个月中正常工作,但是从今天开始,其中一些无法正常工作。

create table Table1
(
 ID NUMBER generated by default on null as identity
  constraint FGEN_PAY_FLEX_PK
   primary key,
 CARD_NO VARCHAR2(19) not null
);

Use Case-1

Expectation:
下面的语句将毫无错误地工作-
Insert Into Table1(Card_No) value('12345');

Actual:
是的,它起作用了。Oracle正在生成标识列的id。

Use Case-2

Expectation:
下面的语句将毫无错误地工作-

create PROCEDURE        MY_SAMPLE_PROCEDURE(I_CARD_NUMBER IN VARCHAR2)
AS

BEGIN

    INSERT into Table1 (Card_No)
    select '12345' FROM DUAL;
     
END LOAD_SINGLE_PAYFLEX_DATA;
/


declare

   I_CARD_NUMBER VARCHAR2(100) := '12345';
         begin
                MY_SAMPLE_PROCEDURE(
                  I_CARD_NUMBER=> I_CARD_NUMBER
                 );
         end;




Actual:
不,现在不起作用了。它两天前就起作用了。

我在尝试执行过程时收到以下异常-

ORA-01400: cannot insert NULL into ("STATEMENT"."Table1"."ID")

专家解答

在我看来很好...

create table table1 (
 id number generated by default on null as identity
  constraint fgen_pay_flex_pk
  primary key,
 card_no varchar2(19) not null
);

create or replace procedure my_sample_procedure(i_card_number in varchar2)
as
begin

    insert into table1 (card_no)
    select '12345' from dual;
     
end my_sample_procedure;
/

declare
   i_card_number varchar2(100) := '12345';
begin
   my_sample_procedure(
     i_card_number=> i_card_number
   );
end;
/

select * from table1;

ID    CARD_NO   
    1 12345      


No, it's not working now. It worked 2 days ago.

那么发生了什么变化?
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论