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值,以确保不会添加尾随空格无明显原因?