Avatar billede dp2001 Juniormester
11. september 2003 - 13:23 Der er 4 kommentarer og
2 løsninger

Brug variabel ifb. med DELETE FROM

Kan jeg bruge en variabel ifb. med DELETE FROM?

Altså noget i stil med følgende...

DECLARE
ENV CHAR(5) := 'ENV14';
BEGIN
DELETE FROM ENV||'.USERS' WHERE USER = 'A99999';
COMMIT;
END;
Avatar billede asger.jensen Nybegynder
11. september 2003 - 14:01 #1
Det her er vist dynamisk SQL. Hvad med noget i stil med:

DECLARE
  ENV CHAR(5) := 'ENV14';
BEGIN
  sqlstr := 'DELETE FROM '||ENV||'.USERS WHERE USER = ''A99999''';
  EXECUTE IMMEDIATE sqlstr;
  COMMIT;
END;
Avatar billede dp2001 Juniormester
12. september 2003 - 00:02 #2
Hvordan gør man det i noget PL/SQL? Jeg får ikke lov til ovenstående.

(bruger værktøjet TOAD fra Quest).
Avatar billede asger.jensen Nybegynder
12. september 2003 - 06:57 #3
Eneste fejl jeg kunne finde var at jeg havde glemt at deklarere sqlstr - er det det du får som fejl eller?. Jeg har brugt SQL*Plus, så driller TOAD stadig, så kan du jo lige prøve nedenståpende i SQL*Plus.


DECLARE
  ENV CHAR(5) := 'ENV14';
  sqlstr varchar2(1000);
BEGIN
  sqlstr := 'DELETE FROM '||ENV||'.USERS WHERE USER = ''A99999''';
  EXECUTE IMMEDIATE sqlstr;
  COMMIT;
END;
Avatar billede dp2001 Juniormester
12. september 2003 - 10:00 #4
Tak for svaret, det virker fint.

Jeg smider 20 point oveni, hvis du samtidig kan løse følgende.

Mit problem er, at jeg ikke kan bruge variablen wrkenv i INSERT'en. Jeg har prøvet følgende uden held:


DECLARE
opr VARCHAR(8);
wrkenv VARCHAR2(8);
sqlstr varchar2(1000);
   
CURSOR c_1 IS
SELECT OPER_DB_LOGID
FROM PELSEC.ENVIRONMENT WHERE ENV_CODE IN ('ENV14');

BEGIN

OPEN c_1;

LOOP
FETCH c_1 INTO opr;
EXIT WHEN c_1%NOTFOUND; 

wrkenv := 'PELwrk'||substr(opr,7,2);
sqlstr := 'INSERT INTO '||opr||'.OPPAR VALUES (''BLTBMAINT'', ''BLTBMAINT'', ''1'', ''0'', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, SYSDATE, SYSDATE, wrkenv)';
EXECUTE IMMEDIATE sqlstr;

END LOOP;

CLOSE c_1;

COMMIT;

END;
Avatar billede bimbambusse Nybegynder
12. september 2003 - 11:03 #5
Det er fordi du ønsker værdien af variablen wrkenv indsat, og ikke som du gør i dit eksempel. Du skal med andre ord gøre med wrkenv som du gør med opr-variablen. DVS. noget i retning af
,SYSDATE,'''||wrkenv||''')';
som afslutning på din sqlstr - givet at wrkenv er en streng.
Avatar billede dp2001 Juniormester
12. september 2003 - 11:19 #6
Virker! Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester