Oracle Apex-使用而不是触发器更新视图
这里是初学者。我在我的Oracle数据库中有一个表单视图:Oracle Apex-使用而不是触发器更新视图,oracle,triggers,views,oracle-apex,Oracle,Triggers,Views,Oracle Apex,这里是初学者。我在我的Oracle数据库中有一个表单视图: create or replace view vw_awkward_view as select unique tab1.some_column1, tab2.some_column1, tab2.some_column2, tab2.some_column3 from table_1 tab1, table_2 tab2 WHERE .... 我需要'tab1.some_column1'上的'unique'子句,因为它
create or replace view vw_awkward_view as
select unique tab1.some_column1,
tab2.some_column1,
tab2.some_column2,
tab2.some_column3
from table_1 tab1,
table_2 tab2
WHERE ....
我需要'tab1.some_column1'上的'unique'子句,因为它的基础表中有许多条目。我还需要在视图中包含“tab1.some_column1”,因为没有它,其余数据就没有多大意义
在Apex中,我想在该视图上创建一个报告,并使用一个表单对其进行编辑(仅限更新)。我不需要编辑tab1.some_column1。只有视图中的其他列需要可编辑。我通常可以使用'instead of'触发器来实现这一点,但是当视图包含'distinct'、'unique'或'group by'子句时,这看起来是不可能的
如果尝试更新此视图上的行,则会出现以下错误:
ORA-02014: cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.
如何避免这个错误?我希望我的'instead of'触发器启动并执行更新,我不需要编辑包含'unique'子句的列,因此我认为应该可以这样做 我认为您应该能够删除“unique”。
如果tab2.some_column1、tab2.some_column2、tab2.some_column3不是唯一的,那么您希望如何更新它们?
如果它们是唯一的则整个结果:tab1.some_column1,tab2.some_column1,tab2.some_column2,tab2.some_column3是唯一的
当您在sql查询中声明“unique”或“distinct”时,它不仅适用于“tab1”。某些列1我认为您应该能够删除“unique”。
如果tab2.some_column1、tab2.some_column2、tab2.some_column3不是唯一的,那么您希望如何更新它们?
如果它们是唯一的则整个结果:tab1.some_column1,tab2.some_column1,tab2.some_column2,tab2.some_column3是唯一的
当您在sql查询中声明“unique”或“distinct”时,它不仅适用于“tab1”。某些列1希望我的问题方向正确;) 您可以通过执行以下操作来实现查询:
select a.some_column1, tab2.some_column1, tab2.some_column2, tab2.some_column3
from table_2 tab2
join (select distinct some_column1 from table_1) a
on tab2.column_in_tab1 = a.some_column1
出现ORA-02014
错误的原因是自动生成的ApplyMRU
过程。此进程将尝试锁定已更改的行:
要获取some_表
表中一行的校验和,其中列1、2、5、7、10、12、14是可编辑的
最后,它的结构应该是这样的:
我几乎感觉自己太过火了,可能感觉有点太多了,但是当你知道其中的陷阱时,其实完成这个定制过程并不难!对我来说,玩它是很有学问的:p希望我在这里回答了你的问题;) 您可以通过执行以下操作来实现查询:
select a.some_column1, tab2.some_column1, tab2.some_column2, tab2.some_column3
from table_2 tab2
join (select distinct some_column1 from table_1) a
on tab2.column_in_tab1 = a.some_column1
出现ORA-02014
错误的原因是自动生成的ApplyMRU
过程。此进程将尝试锁定已更改的行:
要获取some_表
表中一行的校验和,其中列1、2、5、7、10、12、14是可编辑的
最后,它的结构应该是这样的:
我几乎感觉自己太过火了,可能感觉有点太多了,但是当你知道其中的陷阱时,其实完成这个定制过程并不难!对我来说,玩这个游戏是很有学问的:p汤姆的回答是处理这个问题的正确方法,但如果我理解正确,我认为你的要求太过分了
最简单的方法可能是在要编辑的表上创建表单。然后让报表编辑链接将用户带到该表单,该表单将只更新一个表中所需的列。如果需要显示的另一个表中的列的值,则创建链接将该值传递给表单时非常简单,表单可以包含一个仅显示项来显示该值 汤姆的回答是处理这个问题的正确方法,但如果我理解正确,我认为你的要求太过分了
最简单的方法可能是在要编辑的表上创建表单。然后让报表编辑链接将用户带到该表单,该表单将只更新一个表中所需的列。如果需要显示的另一个表中的列的值,则创建链接将该值传递给表单时非常简单,表单可以包含一个仅显示项来显示该值 所有字段都是唯一的-tab1.some_column1,tab2.some_column1,tab2.some_column2,tab2.some_column3。如果tab2.some_column1、tab2.some_column2、tab2.some_column3已经是唯一的,那么为什么需要唯一的?还是我遗漏了什么?啊
select utl_raw.cast_to_raw(dbms_obfuscation_toolkit.md5(input_string=>
"COLUMN1" ||'|'||
"COLUMN2" ||'|'||
"COLUMN5" ||'|'||
"COLUMN7" ||'|'||
"COLUMN10" ||'|'||
"COLUMN12" ||'|'||
"COLUMN14" ||
'|||||||||||||||||||||||||||||||||||||||||||'
)) md5
from some_table