sql >> Database teknologi >  >> RDS >> Oracle

Dynamisk oprettelse og udførelse af sql-kommandoer i Oracle

Oracles VARCHAR2 behandler tomme strenge som NULL .

if tname != '' then

er det samme som

if tname != NULL then

hvilket vil returnere NULL i stedet for TRUE da det ikke er defineret.

Du kan tjekke for NULL af tname IS NOT NULL .

table_name er obligatorisk i user_tables dog, så der er ikke behov for denne kontrol.

To ting mere:

  1. Se efter %NOTFOUND umiddelbart efter hentning
  2. Brug kolonnereferencer til variable erklæringer, hvis det er muligt ( user_tables.table_name%TYPE )

Så din kode kunne se sådan ud:

DECLARE
  tname user_tables.table_name%TYPE;
  CURSOR ctable IS SELECT table_name FROM user_tables;
BEGIN
  OPEN ctable;
  LOOP
    FETCH ctable INTO tname;
    EXIT WHEN ctable%NOTFOUND;
    EXECUTE IMMEDIATE 'drop table ' || tname;
  END LOOP;
  CLOSE ctable;
END;

Du kan også bruge en implicit markør for bedre læsbarhed:

BEGIN
  FOR cur IN ( SELECT table_name FROM user_tables ) LOOP
    EXECUTE IMMEDIATE 'drop table ' || cur.table_name;
  END LOOP;
END;



  1. PostgreSQL 13:LIMIT … MED BÅND

  2. Forståelse af, hvordan man optimerer en forespørgsel via Postgres/rails forklarer data

  3. Kumulativ forskel

  4. Hvad er en forespørgselsudligger, og hvordan rettes den