【问题标题】:Error creating row on form在表单上创建行时出错
【发布时间】:2016-09-19 19:08:23
【问题描述】:

在我尝试在 APEX 上的一个页面中创建新行后,出现以下错误:

ORA-02291:违反完整性约束 (BD43015.SYS_C001194280) - 未找到父键 ORA-06512:在“BD43015.INSERT_STUDENT”第 4 行 ORA-04088:执行触发器“BD43015.INSERT_STUDENT”时出错 ORA-06512 :在“SYS.WWV_DBMS_SQL”,第 549 行 ORA-06512:在“APEX_040000.WWV_FLOW_DML”,第 1121 行 ORA-22816:带有 RETURNING 子句的不支持的功能 错误无法处理表 V_ALLSTUDENTS 的行。 好的

注意:我正在尝试使用此触发器:

create or replace trigger insert_student
instead of insert on v_allstudents
for each row
begin
  insert into members values(:new.memberID, :new.name, :new.birth, :new.regist_date, :new.address, :new.sex, :new.phone);
  insert into students values(:new.memberID, :new.guardian, :new.rank, :new.plan_name, :new.plan_value);
end;
/

还有这个观点:

create or replace view v_allstudents(memberID, name, birth, regist_date, address, sex, phone, guardian, rank, plan_name, plan_value) AS
select members.memberID, name, birth, regist_date, address, sex, phone, guardian, rank, plan_name, plan_value
from members, students
where members.memberID = students.memberID
order by members.name;

表成员:

drop table members cascade constraints;
create table members(
  memberID number(10) not null,
  name varchar2(30) not null,
  birth date not null,
  regist_date date not null,
  address varchar2(50) not null,
  sex char(1) not null CHECK (sex IN ('F', 'M')),
  phone number(9),
  primary key(memberID)
);

表学生:

drop table students cascade constraints;
create table students(
  memberID number(10) not null,
  guardian varchar2(30),
  rank varchar2(20) not null,
  plan_name varchar2 (30) not null,
  plan_value number(10) not null,
  primary key(memberID),
  foreign key(memberID) references members(memberID)
);

编辑修复:我们有一个与插入 memberID 冲突的触发器。

【问题讨论】:

  • 请发布成员表和学生表的表结构以及所有约束。另外,您能否尝试在 SQLPLUS 或 SQL Developer 的 v_allstudents 中插入一行。这样做将帮助您了解问题是否出在 Oracle Apex 上。

标签: sql oracle oracle11g oracle-apex


【解决方案1】:

我可以从 SQLPLUS 成功重现该问题。

以下语句有效。

declare
  v_memberid number;
begin
  insert into 
  v_allstudents(memberID, name, birth, regist_date, address, sex, phone, guardian, rank, plan_name, plan_value)
  values
  (1,'Neo',to_date('13-Jan-2009','dd-mon-yyyy'),to_date('13-Jan-2009','dd-mon-yyyy'),'My address','M',1234,'Trinity',1,'My Plan',2525)
end;

以下语句不起作用并抛出 ORA-22816。

declare
  v_memberid number;
begin
  insert into 
  v_allstudents(memberID, name, birth, regist_date, address, sex, phone, guardian, rank, plan_name, plan_value)
values
  (1,'Neo',to_date('13-Jan-2009','dd-mon-yyyy'),to_date('13-Jan-2009','dd-mon-yyyy'),'My address','M',1234,'Trinity',1,'My Plan',2525)
  returning memberID into v_memberid;
end;

这是来自 Oracle 文档的错误描述。

对象类型列、LONG 列、远程表、带有子查询的 INSERT、和 INSTEAD OF 触发器目前不支持 RETURNING 子句。

在这种情况下,Oracle Apex 正在生成带有返回子句的插入语句,或者您在 Oracle Apex 中编写了带有返回子句的定制代码。

我建议使用 Oracle 顶点表单取消而不是触发器并将值插入到这两个表中。

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2017-06-03
    • 2021-12-23
    相关资源
    最近更新 更多