webForumDet fria alternativet

Oracle - PL/SQL

Databaser & SQL

4 svar · 590 visningar · startad av b3rra

Medlem sedan juli 2004103 inlägg
Frågan#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?

Medlem sedan dec. 200012 464 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)
Medlem sedan juli 2004103 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

Medlem sedan dec. 200012 464 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.

Medlem sedan juli 2004103 inlägg
#5

Tackar!

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

Mvh B3rra

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)