webForumDet fria alternativet

Oracle - PL/SQL

4 svar · 588 visningar · startad av b3rra

b3rraMedlem sedan juli 2004104 inlägg
#1

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
#2

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
#3

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
#4

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
#5

Tackar!

Du gör ett underbart jobb här, ändrade lite på koden och nu fungerar det.

Mvh B3rra

Genererad på 369 ms · cache AV · v20260730165559-full.f96bc7eb