我遇到問題,無法找到解決方案。我在上週開始使用PL/SQL,這意味着我的能力非常有限。如何使用兩個遊標並顯示它們PL/SQL
不管怎麼說,我有這樣的格式化的表格要導出到另一個工作腳本:只有最後一個ID(S_ID)由NUMBER(N_PROT)分組
select
'7' as M_ID,
N_PROT as SUBSCRIPTION_VERSION_ID,
/* ..... bunch of other business logic */
from N_TRANS
where (CORA in ('0215','0320') or CORA in ('0215', '0320'))
and N_PROT IS NOT null;
但它需要改變搜索。於是,我做了另一個separeted腳本從表中的最後一個ID(S_ID)組由數字(N_PROT)搜索:
declare
cursor S_CURS IS
select
max(S_ID) keep(dense_rank LAST order by N_PROT) S_ID,
NR_PROTOCOLO
from N_TRANS
group by N_PROT
order by S_ID;
S_HIST_T S_CURS%ROWTYPE;
type NTT_S_HIST_TRANS is table of S_HIST_T%type;
LLL_S_HIST_TRANS NTT_S_HIST_TRANS;
begin
open S_CURS;
fetch S_CURS bulk collect into LLL_S_HIST_TRANS;
close S_CURS;
for indxx in 1..LLL_S_HIST_TRANS.count loop
--The IDs as a var
DBMS_OUTPUT.PUT_LINE(LLL_S_HIST_TRANS(indxx).S_HIST_T);
end loop;
end;
,問題是我怎麼會加入這個兩個腳本。我想到的一種可能的解決方法是使用在第二個腳本(¹)中執行循環中的第一個腳本。這樣的事情:
declare
cursor S_CURS IS
select
...
begin
...
for indxx in 1..LLL_S_HIST_TRANS.count loop
--The IDs as a var
select
'7' as M_ID,
N_PROT as SUBSCRIPTION_VERSION_ID,
/* ..... bunch of other business logic */
from N_TRANS
where (CORA in ('0215','0320') or CORA in ('0215', '0320'))
and N_PROT IS NOT null
and S_ID = LLL_S_HIST_TRANS(indxx).S_HIST_T; -- (¹)
end loop;
end;
因此,這樣,我將如何保存內幕選擇並導出結果。我知道這不是一個好習慣,但我不能想出更好的東西。 如果有人可以給我一些關於如何解決這個問題或者幫助我解決這個問題的其他觀點,那就太棒了!
只是爲了恢復該問題,我已經啓動了一個腳本並運行了,並且需要將其更改爲執行相同的操作,但添加了只能使用最後一個ID的條件。我製作了一個能夠獲得ID並用光標隔離它的腳本,現在,我必須將這些ID包含在第一個腳本中。
謝謝!
謝謝你的回覆,我很抱歉,如果我還不清楚,但是這不是我所需要的。您所寫的內幕選擇([...]選擇'7'爲m_id ,n_prot as subscription_version_id [...])必須是外部的,並且僅使用光標選擇中的ID。 – RochaRF
也許一些相同的數據和結果會使問題更清楚。以上是「每組最後一行」過濾類型的一般模式。 –