如何使用 Enter-query 操作获取 oracle 表单生成的数据块默认值

Sad*_*aal 3 oracle oracleforms

我正在使用 oracle 表单 6i。

只是我将数据库块与这些项目一起使用:

Employees:    employee_id , job_id , department_id , manager_id
Run Code Online (Sandbox Code Playgroud)

注意:员工是数据块名称。

例如:当最终用户点击进入查询按钮并在department_id项目中写入50然后点击执行查询按钮时;数据块将返回部门 50 中的所有员工。

我的问题是:如何获得 oracle 表单在返回所需数据时生成的 WHERE CLAUSE?...

我在 pre-query trigger

:parameters.whr:=get_block_property('employees',default_where);
Run Code Online (Sandbox Code Playgroud)

但它没有返回任何结果

Lit*_*oot 5

你很接近,但还不够接近。这是GET_BLOCK_PROPERTY你需要的,但使用它的LAST_QUERY参数。它将返回指定块中最后一个查询的 SQL 语句。

或者,使用系统变量:SYSTEM.LAST_QUERY(返回相同的结果)。

这是一个示例(以下代码可能会放在block 的KEY-EXEQRY触发器中employees):

declare
  l_lastq          varchar2(4000);
  l_where_position number;
  l_where_clause   varchar2(4000);
begin
  execute_query;
  l_lastq := :system.last_query;
  l_where_position := instr(lower(l_lastq), 'where');

  if l_where_position > 0 then
     l_where_clause := substr(l_lastq, l_where_position, length(l_lastq));
     message('WHERE clause: ' || l_where_clause);
  end if;
end;
Run Code Online (Sandbox Code Playgroud)