我有PHP A类和B类。它们是独立存在的,对于每一个我都有等效的Oracle PL / SQL定义,即。
type cursorA is ref cursor return recordA;
type cursorB is ref cursor return recordB;
允许返回多个数据行,以便在单个数据库调用中创建多个A或B PHP对象。到目前为止一切都很好......
在某些情况下,我需要一个查询,在单个A + B游标中返回组合的recordA和recordB字段。
我可以通过创建一个新的单个recordC来实现这一点,该记录结合了recordsA和recordsB中的所有字段,然后执行cursorC以返回逻辑" A + B"信息,但这有效地复制了A和B记录定义,我宁愿通过做类似的事情来避免这种情况:
type recordC is record (recordA plus recordB);
type cursorC is refcursor return recordC;
或
type cursorC is ref cursor return recordA plus recordB;
以上陈述似乎不起作用,但我感兴趣的是PL / SQL是否有可能实现一些允许重新使用/组合recordA和recordB定义而不需要recordA的等价物和recordC中的recordB字段重复。
要明确的是,这不是"将游标数据从游标转换为一个"。这是构建1游标的单个查询,其返回列为recordC。对于"分裂"会产生显着的负面影响。查询到2个单独的查询,它不是我要查找的功能。
答案 0 :(得分:0)
没有。 PL / SQL不支持(记录或游标)类型(reflection)的运行时/编译时操作,但数据类型非常静态(和准系统)。在某些领域,PL / SQL有点老式和冗长的语言。
组合记录的PL / SQlish方法很简单:
type recordC is record(
a recordA
,b recordB
);
但是PL / SQL的主要功能是SQL部分,因此如果您可以调整select
语句,您可以考虑以下选项,其中A
和{{{ 1}}(分别为B
和foo
)。这当然假设它们之间存在合理的关系(在本例中为bar
):
foo.id = bar.id
如果你喜欢这种权衡,那就是你的电话。
从Typo评论中收集的其他可能选项: