b3rraMedlem sedan juli 2004104 inlägg
Hej,
jag sitter på en oracle datbas och skriver lite PL/SQL
skulle behöva hjälp med att få till följande:
variable_sql varchar2(11000) := Select id from table where status=12
DELETE FROM table WHERE column in (variable_sql)
column är numerisk och resultatet förväntas bli 78,89,67 osv.
Hur får jag till det?
LarsGMedlem sedan dec. 200012 465 inlägg
Varför måste du ha en variabel? Kan du inte bara göra
delete from t1
where c in
(Select id
from t2
where status=12)
b3rraMedlem sedan juli 2004104 inlägg
Hel sant,
men det rör sig om en lång SQL i in-satsen som byts ut med jämna mellanrum.
Samtidigt som den rör ett 60 tal tabeller(samma sql behöver kopieras in i ca 60 delete satser).
Så jag skulle vilja slippa att uppdatera på flera ställen.
// B3rra
LarsGMedlem sedan dec. 200012 465 inlägg
Ok, då får du använda någon lämplig cursor-loop och bygga ihop en lista med id-värden och sedan göra lite dynamisk sql.
declare
cursor c8 is
select id from t2;
declare ids varchar(3000);
for r in c8 loop
ids := coalesce(ids || ',','') || r.id;
end loop;
if ids is not null then
execute immediate 'delete from t where id in (' || ids || ')';
end if;
Ovanstående är helt otestat men kanske är till någon hjälp i alla fall.
b3rraMedlem sedan juli 2004104 inlägg
Tackar!
Du gör ett underbart jobb här, ändrade lite på koden och nu fungerar det.
Mvh B3rra