如何以表格形式显示单个记录?

时间:2018-07-02 09:32:41

标签: oracle oracle11g oracle10g oracleforms

我想以表格形式按下按钮时一一显示单个记录

如何以oracle形式执行此操作?

1 个答案:

答案 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等触发器。


很快,我认为您想要的不是一个简单的任务。我是否已经说过您一开始就不应该这样做?好吧,我还是这么认为。

希望其他人会有更好,更简单的建议。