0

我正在使用 oracle 10g

我必须从“dp_table”创建一个视图“dposition_view”,其中包含一些字段,最后我需要一个像“unmatched_flag”这样的布尔列。
如果“bom_mapping”表不包含与“dp_table”中匹配字段的记录,则列中的值应为“true”,如果两个表之间存在匹配记录,则该列中的值应为“false”。
要检查的匹配字段有:eng_code、work_code、position、alt_pos(常见于dp_table和bom_mapping表)。

填充此布尔标志 - 'unmatched_flag' 的逻辑将如何?

现在我有:

Create or Replace view dposition_view (",,,,,"unmatched_flag") as 
(Select dp_table.eng_code,......  'UNMATCHED_FLAG' ?? )
4

1 回答 1

1

Oracle PL/SQL 具有布尔数据类型,但 Oracle SQL 没有。我不确定您是否打算将字符串存储为'TRUE'and'FALSE'1and 0,但这是您的选择。您的数据结构也不清楚,但是在做出假设之后,您可以根据匹配条件进行外部连接 bom_mappingdp_table然后用于NVL2()unmatched列中设置所需的标志:

create or replace view dposition_view(
  /* Your columns */,
  unmatched_flag) 
as
select 
  /* Your columns */,
  NVL2(bom.eng_code,'FALSE','TRUE') unmatched_flag
from dp_table dp
left outer join bom_mapping bom on dp.eng_code = bom.eng_code 
  and dp.work_code = bom.work_code 
  and dp.position = bom.position
  and dp.alt_pos = bom.alt_pos
  and -- Other conditions on the bom_mapping table
where ... -- Conditions on the dp_table

bom.eng_code如果连接没有找到匹配项,则为 null,如果有匹配的记录,则有一个值。NVL2()如果匹配 ( FALSE) 或不匹配 ( TRUE),则可以设置所需的值。

于 2013-03-18T22:40:51.210 回答