Oracle 甲骨文顶点19。如何从3个表中创建具有交互式报告的表单?
我写了一个内部连接语句。显示了一个表,但我无法从中编辑全名 输入表 我的问题是。。。我应该如何创建一个可以编辑所有表字段的复杂表单 请给我任何提示,否则我会发疯的:( 我尝试创建一个视图:Oracle 甲骨文顶点19。如何从3个表中创建具有交互式报告的表单?,oracle,oracle-apex,oracle-apex-19.1,Oracle,Oracle Apex,Oracle Apex 19.1,我写了一个内部连接语句。显示了一个表,但我无法从中编辑全名 输入表 我的问题是。。。我应该如何创建一个可以编辑所有表字段的复杂表单 请给我任何提示,否则我会发疯的:( 我尝试创建一个视图: CREATE VIEW STAMP_TEST AS SELECT s.STAMP_ID , s.PERSON_ID , hp.FULL_NAME, h.DESCRIPTION FROM STAMPS s INNER JOIN EMPLOYEES_IMPORT hp O
CREATE VIEW STAMP_TEST AS
SELECT s.STAMP_ID ,
s.PERSON_ID ,
hp.FULL_NAME,
h.DESCRIPTION
FROM STAMPS s
INNER JOIN EMPLOYEES_IMPORT hp ON s.PERSON_ID = hp.PERSON_ID
INNER JOIN DEPARTMENTS_IMPORT h ON hp.ORGANIZATION_ID = h.ORGANIZATION_ID
我想我不理解示例中的触发器函数,因为我遇到了一个错误:
create or replace trigger trg_ed_seal_stamps
instead of insert or update
on STAMP_TEST
for each row
begin
if inserting then
insert into STAMPS (STAMP_ID, START_DT)
values (:new.SEAL_STAMP_ID, :new.START_DT);
insert into EMPLOYEES_IMPORT (FULL_NAME)
values (:new.FULL_NAME);
insert into DEPARTMENTS_IMPORT (DESCRIPTION)
values (:new.DESCRIPTION);
elsif updating then
update STAMPS set
STAMP_ID = :new.STAMP_ID
where PERSON_ID = :new.PERSON_ID;
update EMPLOYEES_IMPORT set
FULL_NAME = :new.FULL_NAME
where PERSON_ID = :new.PERSON_ID;
update HDEPARTMENTS_IMPORT set
DESCRIPTION = :new.DESCRIPTION
where ORGANIZATION_ID = :new.ORGANIZATION_ID;
end if;
end;
/
因此,我设法创建了触发器,并在sql语句中更新了值:)
但当我添加一个带有表的表单时,apex仍然无法更新值
错误:
ORA-22816: unsupported feature with RETURNING clause
详情:
is_internal_error: false
component.type: APEX_APPLICATION_PAGE_PROCESS
component.id: 14401759410321665
component.name: Process form sds
error_backtrace:
----- PL/SQL Call Stack -----
object line object
handle number name
0x4255f33438 971 package body APEX_190100.WWV_FLOW_ERROR.INTERNAL_GET_ERROR
0x4255f33438 1039 package body APEX_190100.WWV_FLOW_ERROR.INTERNAL_ADD_ERROR
0x4255f33438 1092 package body APEX_190100.WWV_FLOW_ERROR.ADD_ERROR
0x40ffd4e4b0 593 package body APEX_190100.WWV_FLOW_PROCESS.ADD_ERROR_MESSAGE
0x4738108530 547 package body APEX_190100.WWV_FLOW_FORM_REGION.RAISE_ERROR_MESSAGE
0x4738108530 1185 package body APEX_190100.WWV_FLOW_FORM_REGION.DML_PROCESS_INT
0x4738108530 2198 package body APEX_190100.WWV_FLOW_FORM_REGION.DML_PROCESS
0x44b06ce5e8 1246 package body APEX_190100.WWV_FLOW_PROCESS_NATIVE.EXECUTE_PROCESS
0x448c6bff28 2473 package body APEX_190100.WWV_FLOW_PLUGIN.EXECUTE_PROCESS
0x40ffd4e4b0 203 package body APEX_190100.WWV_FLOW_PROCESS.PERFORM_PROCESS
0x40ffd4e4b0 450 package body APEX_190100.WWV_FLOW_PROCESS.PERFORM
0x472c9ca568 5726 package body APEX_190100.WWV_FLOW.ACCEPT
0x44b175fb00 2 anonymous block
一个选项是根据您编写的
select
语句创建视图。然后创建一个而不是触发器,该触发器将关注什么会发生在哪里。所有这些都将在数据库内完成;Apex将仅用于显示值(IR)和将数据“传输”到视图(表单),而instead of触发器将数据移动到适当的表中
如何创建替代触发器?使用创建触发器
。例如,根据Scott的模式:
这是一种观点:
SQL> create or replace view v_emp_dept as
2 select d.deptno, d.dname, e.empno, e.ename, e.job, e.sal
3 from emp e join dept d on e.deptno = d.deptno;
View created.
SQL> select * From v_emp_Dept;
DEPTNO DNAME EMPNO ENAME JOB SAL
---------- -------------- ---------- ---------- --------- ----------
20 RESEARCH 7369 SMITH CLERK 800
30 SALES 7499 ALLEN SALESMAN 1600
30 SALES 7521 WARD SALESMAN 1250
20 RESEARCH 7566 JONES MANAGER 2975
30 SALES 7654 MARTIN SALESMAN 1250
30 SALES 7698 BLAKE MANAGER 2850
10 ACCOUNTING 7782 CLARK MANAGER 2450
20 RESEARCH 7788 SCOTT ANALYST 3000
10 ACCOUNTING 7839 KING PRESIDENT 5000
30 SALES 7844 TURNER SALESMAN 1500
20 RESEARCH 7876 ADAMS CLERK 1100
30 SALES 7900 JAMES CLERK 950
20 RESEARCH 7902 FORD ANALYST 3000
10 ACCOUNTING 7934 MILLER CLERK 1300
14 rows selected.
SQL>
而不是触发器可能如下所示:
SQL> create or replace trigger trg_ed
2 instead of insert or update
3 on v_emp_dept
4 for each row
5 begin
6 if inserting then
7 insert into dept (deptno, dname)
8 values (:new.deptno, :new.dname);
9 insert into emp (deptno, empno, ename, job, sal)
10 values (:new.deptno, :new.empno, :new.ename, :new.job, :new.sal);
11 elsif updating then
12 update dept set
13 dname = :new.dname
14 where deptno = :new.deptno;
15 update emp set
16 deptno = :new.deptno,
17 ename = :new.ename,
18 job = :new.job,
19 sal = :new.sal
20 where empno = :new.empno;
21 end if;
22 end;
23 /
Trigger created.
SQL>
测试:更新并插入:
SQL> update v_emp_dept set
2 dname = 'accounting'
3 where deptno = 10;
3 rows updated.
SQL> insert into v_emp_dept (deptno, dname, empno, ename, job, sal)
2 values (99, 'New dept', 1, 'Littlefoot', 'Developer', 1000);
1 row created.
结果:
SQL> select * From dept;
DEPTNO DNAME LOC
---------- -------------- -------------
99 New dept --> new row
10 accounting NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select * From emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
1 Littlefoot Developer 1000 99 --> new row
7369 SMITH CLERK 7902 17.12.80 800 20
7499 ALLEN SALESMAN 7698 20.02.81 1600 300 30
7521 WARD SALESMAN 7698 22.02.81 1250 500 30
7566 JONES MANAGER 7839 02.04.81 2975 20
7654 MARTIN SALESMAN 7698 28.09.81 1250 1400 30
7698 BLAKE MANAGER 7839 01.05.81 2850 30
7782 CLARK MANAGER 7839 09.06.81 2450 10
7788 SCOTT ANALYST 7566 09.12.82 3000 20
7839 KING PRESIDENT 17.11.81 5000 10
7844 TURNER SALESMAN 7698 08.09.81 1500 0 30
7876 ADAMS CLERK 7788 12.01.83 1100 20
7900 JAMES CLERK 7698 03.12.81 950 30
7902 FORD ANALYST 7566 03.12.81 3000 20
7934 MILLER CLERK 7782 23.01.82 1300 10
15 rows selected.
SQL>
感谢您的回答:)如何创建而不是触发器?不客气。我编辑了我的答案并添加了一些代码;请看一看。我试图创建一个视图,但它不起作用。我应该创建一个只包含2个表还是3个表的视图@Littlefoot您能帮助我吗:)视图只是一个存储查询,它可以包含任意多个表。您知道我的视图状态有什么问题吗?我编辑了我的问题