我想以表格形式按下按钮时一一显示单个记录
如何以oracle形式执行此操作?
答案 0 :(得分:0)
我建议您使用Forms的内置功能,将时间和精力花在其他事情上。
我想在按下按钮单向前进时显示单个记录,而在按下按钮单向前进时显示所有记录
我认为这些按钮(“单个”和“双前进”)是定制按钮(即您创建的按钮)。
如果是这样,“双倍前进”很简单-将EXECUTE_QUERY
放入其WHEN-BUTTON-PRESSED
触发器中(假设这是一个基于表的数据块)。
“单向前进”并不是那么简单,因为您不能执行查询,因此您必须编写一些代码。例如,您可以将结果数据集“准备”到另一个表中,指定行号,以便以后使用:
insert into temp_table (rn, deptno, dname, loc)
select rownum, deptno, dname, loc
from dept
where ...
WHERE
子句有点棘手,因为用户可以输入搜索条件。怎么知道使用GET_BLOCK_PROPERTY
。由于它带来了动态SQL 的香味,因此您必须编写INSERT
语句-考虑创建一个利用EXECUTE IMMEDIATE
的存储过程(或者,看看是否{{ 1}}可以使用)。
由于许多用户可以同时使用同一表格,因此“临时表”应为全局临时表,或者-如果不是,则还必须保存用户信息;否则,您将造成混乱。
现在准备数据。在表单中,您必须创建一个保存当前“行号”(rn)值的参数(或全局变量)。然后,“单向”按钮的触发器就会
FORMS_DDL
好,现在您有了数据,并且出现了新问题。由于它是一个数据块,因此以这种方式向其中插入值时就假定您插入了全新的信息集,而Forms会将其视为那样。因此,如果您尝试将其保存,则会遇到唯一的密钥冲突(可以)或重复的数据(不好)。
这意味着“数据块”实际上应该是与表无关的“控制块”。此外,这意味着“双倍前进”无法按我描述的方式工作,而是通过修改“单向前进”按钮的代码来实现(不要逐行读取,而是一次读取所有代码)。
如果这是一个控制块,那么现在您必须找到一种方法来存储修改后的值以及新添加的记录,因此您必须创建自己的last_record;
create_record;
select deptno, dname, loc
into :blk.deptno, :blk.dname, :blk.loc
from temp_table where rn = :parameter.rn;
-- prepare the next row
:parameter.rn := :parameter.rn + 1;
,ON-INSERT
等触发器。
很快,我认为您想要的不是一个简单的任务。我是否已经说过您一开始就不应该这样做?好吧,我还是这么认为。
希望其他人会有更好,更简单的建议。