sql >> Database >  >> RDS >> Oracle

Dynamisch maken en uitvoeren van sql-opdrachten in oracle

Oracle's VARCHAR2 behandelt lege strings als NULL .
Dus

if tname != '' then

is hetzelfde als

if tname != NULL then

die NULL teruggeeft in plaats van TRUE omdat het niet gedefinieerd is.

U kunt controleren op NULL door tname IS NOT NULL .

table_name is verplicht in user_tables deze controle is echter niet nodig.

Nog twee dingen:

  1. Controleer op %NOTFOUND onmiddellijk na het ophalen
  2. Gebruik indien mogelijk kolomverwijzingen voor variabele declaraties ( user_tables.table_name%TYPE )

Dus je code zou er zo uit kunnen zien:

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;

U kunt ook een impliciete cursor gebruiken voor een betere leesbaarheid:

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



  1. Een DB-koppeling maken tussen twee Oracle-instanties

  2. Een voorwaardelijke UPDATE-instructie gebruiken in SQL

  3. Hoe zou ik wiskunde uitvoeren binnen een sql-query om het procentuele verschil te berekenen?

  4. 7 strategieën om het meeste uit uw vergaderingen te halen