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;
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;
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;
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.