Seiten

Freitag, 19. März 2010

Oracle: DROP TABLE OR SEQUENCE IF EXIST als Prozedur

CREATE OR REPLACE
PROCEDURE drop_object
(
ObjName IN VARCHAR2
) IS
counter  NUMBER := 0;
to_drp   VARCHAR2(200) := UPPER(ObjName);
drp_stmt VARCHAR2(200) := NULL;

BEGIN

  SELECT COUNT(*)
  INTO counter
  FROM user_tables
  WHERE table_name = to_drp;
  IF counter = 1
  THEN drp_stmt := 'Drop Table ' || to_drp;
  EXECUTE IMMEDIATE drp_stmt;
  END IF;

  SELECT COUNT(*) INTO counter
  FROM user_sequences
  WHERE sequence_name = to_drp;
  IF counter = 1 THEN
    drp_stmt := 'DROP SEQUENCE ' || to_drp;
    EXECUTE IMMEDIATE drp_stmt;
  END IF;

END DROP_OBJECT;
/

Der Aufruf der Prozedur könnte z.B. so erfolgen:

CALL drop_object('t_test');
CREATE TABLE t_test
(
  test_id NUMBER, uid_text VARCHAR2(80)
)

Keine Kommentare:

Kommentar veröffentlichen