Oracle Forms - 在非数据库项上搜索

时间:2016-12-14 09:28:39

标签: oracle plsql oracleforms

我有一个包含四个项目的数据块OBJECTS:

  • ID
  • TYPE_ID(外键,表TYPES中的名称ID)
  • TYPE_DESCRIPTION(非数据库项,在表TYPES中名为DESCRIPTION)
  • STA_ID(不相关)

在我希望能够在TYPE_DESCRIPTION(非数据库项目)上查询的表单中,键入一个短语,如“S%”或“%P”,并获取所有列的结果,由TYPE_DESCRIPTION过滤。

截图: https://imgur.com/gallery/UbDnH

1 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案。这是PRE_QUERY触发器的代码:

declare 
where_str varchar2(512) := 'where 1 = 1';
begin

if (:OBJECTS.TYPE_DESCRIPTION is not null) then
  if instr(:OBJECTS.TYPE_DESCRIPTION, '%') <> 0 then
    where_str := where_str ||
    'and OBJECTS.TYPE_ID in (select TYPES.ID from TYPES ' ||
    'where TYPES.DESCRIPTION like '''|| replace(:OBJECTS.TYPE_DESCRIPTION, '''', '''''') ||''')';
  else
    where_str := where_str ||
    'and OBJECTS.TYPE_ID in (select TYPES.ID from TYPES ' ||
    'where TYPES.DESCRIPTION='''|| replace(:OBJECTS.TYPE_DESCRIPTION, '''', '''''') ||''')';
  end if;
end if; 

set_block_property('OBJECTS', default_where, where_str);

end;

http://oracleebsgeeks.blogspot.com/2011/12/querying-on-non-database-field-in.html