Oracle SQL Union/Merge with Duplicates问题

Mar*_*ain 5 oracle plsql user-defined-functions oracle11g

希望有人可以帮助我.

所以假设我有一个名为"TEMP_TABLE"的临时表

 EMP_ID     number
 EMP_FNAME  varchar2()
 EMP_LNAME  varchar2()
Run Code Online (Sandbox Code Playgroud)

"TEMP_TABLE"中的记录

1, Some, Guy
2, Some, Girl
3, Some, Animal
Run Code Online (Sandbox Code Playgroud)

通过一些SQL魔术,我不打算深入研究,计算这些值并将其放入TEMP_TABLE中,select * from TEMP_TABLE即函数返回的a 的多重集合

让我们说功能是 FUNC_THAT_RETURNS_TABLE

好的,如果我说的话 Select * from table("FUNC_THAT_RETURNS_TABLE");

我回来了:

  1, Some, Guy
  2, Some, Girl
  3, Some, Animal
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

所以现在我创建另一个名为的表 "NEWLY_CREATED_TABLE"

说:

 Create Table "NEWLY_CREATED_TABLE" AS
 (Select * FROM table("FUNC_THAT_RETURNS_TABLE")); 
Run Code Online (Sandbox Code Playgroud)

请注意,该表是通过查询函数创建的

所以这三个记录现在应该在NEWLY_CREATED_TABLE内

问题是,如果我说:

Select * FROM NEWLY_CREATED_TABLE
Union
SELECT * FROM table("FUNC_THAT_RETURNS_TABLE");
Run Code Online (Sandbox Code Playgroud)

结果集是:

 1, Some, Guy
 1, Some, Guy
 2, Some, Girl
 2, Some, Girl
 3, Some, Animal
 3, Some, Animal
Run Code Online (Sandbox Code Playgroud)

即使数据完全相同,有人可以告诉我我错过了什么吗?

在测试使用合并的可能性时,我发现了联合问题.当我尝试将表中的数据与函数中的数据合并时,表中的所有数据都将被替换.这让我认为代码没有正确识别唯一记录.

我的合并代码:

 Merge Into Newly_Created_Table a
 using
 (
   Select * from table(Func_That_Returns_TABLE)
 ) b
On (a.EMP_ID = b.EMP_ID)

When Matched....

When Not Matched....
Run Code Online (Sandbox Code Playgroud)

**编辑**9-7-2016 SHOUTOUT到@Shannon Severance其中一个列中有一个空白区域.

是否有任何方法除了在插入之前尝试修剪,截断或使用触发器修剪:NEW值,以确保不会添加尾随空格无明显原因?