Deletes a schema and all the definitions that it contains.
1 – Environment
You can use the DROP SCHEMA statement:
o In interactive SQL
o Embedded in host language programs to be precompiled
o As part of a procedure in an SQL module
o In dynamic SQL as a statement to be dynamically executed
2 – Format
DROP SCHEMA <schema-name> -+-+---------------+-+-->
| +-> CASCADE ---+ |
| +-> RESTRICT --+ |
| +-> IF EXISTS --+ |
+----------<--------+
3 – Arguments
3.1 – CASCADE
Deletes all other definitions (views, constraints, tables,
sequences, indexes, and triggers) that refer to the named schema
and then deletes that schema definition. This is known as a
cascading delete.
If you specify the CASCADE keyword, SQL deletes all definitions
contained by the schema before deleting the schema.
If you do not specify the CASCADE keyword, the schema must be
empty.
3.2 – IF_EXISTS
Prevents SQL command language from displaying error messages if
the referenced object does not exist in the database.
3.3 – RESTRICT
Returns an error message if other definitions refer to the named
schema. The DROP SCHEMA RESTRICT statement will not delete a
schema until you have deleted all other definitions that refer to
the named schema. The DROP SCHEMA statement specifies an implicit
RESTRICT by default.
3.4 – schema-name
Specifies the schema name. You must qualify the schema name with
catalog and alias names if the schema is not in the default
catalog and database. For more information about schema names,
see the User_Supplied_Names HELP topic.
4 – Examples
Example 1: Deleting a schema with implicit RESTRICT
In the following example, the user must delete the definitions
that refer to the schema RECRUITING before deleting the schema
itself.
After setting the default schema to RECRUITING and the default
catalog to ADMINISTRATION, the user can qualify each definition
name with only the alias CORP.
SQL> ATTACH 'ALIAS CORP FILENAME CORPORATE_DATA';
SQL> SET CATALOG '"CORP.ADMINISTRATION"';
SQL> SET SCHEMA '"CORP.ADMINISTRATION".RECRUITING';
SQL> SET QUOTING RULES 'SQL92';
SQL> DROP SCHEMA "CORP.RECRUITING";
%RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-E-SCHEMAINUSE, schema RECRUITING currently in use
SQL> DROP TABLE "CORP.CANDIDATES";
SQL> DROP TABLE "CORP.COLLEGES";
%RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-F-CONEXI, relation COLLEGES is referenced in constraint DEGREES_FOREIGN3
-RDMS-F-RELNOTDEL, relation COLLEGES has not been deleted
SQL> DROP TABLE "CORP.DEGREES";
%RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-F-TRGEXI, relation DEGREES is referenced in trigger
EMPLOYEE_ID_CASCADE_DELETE
SQL> DROP TABLE "CORP.RESUMES";
%RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-F-TRGEXI, relation RESUMES is referenced in trigger
EMPLOYEE_ID_CASCADE_DELETE
-RDMS-F-RELNOTDEL, relation RESUMES has not been deleted
SQL> --
SQL> -- The trigger is part of another schema, PERSONNEL. Since this
SQL> -- is not the default schema, the user qualifies the trigger name
SQL> -- with schema and names.
SQL> --
SQL> DROP TRIGGER "CORP.ADMINSTRATION".PERSONNEL.EMPLOYEE_ID_CASCADE_DELETE;
SQL> DROP CONSTRAINT "CORP.DEGREES_FOREIGN3";
%RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-F-CONDELVIAREL, constraint DEGREES_FOREIGN3 can only be deleted by
changing or deleting relation DEGREES
SQL> DROP TABLE "CORP.DEGREES";
SQL> DROP TABLE "CORP.RESUMES";
SQL> DROP TABLE "CORP.COLLEGES";
SQL> DROP SCHEMA "CORP.RECRUITING";
Example 2: Deleting a schema with CASCADE
In the following example, SQL deletes the definitions that refer
to the schema ACCOUNTING, then deletes the schema itself:
SQL> DROP SCHEMA "CORP.ACCOUNTING" CASCADE;
Domain "CORP.ADMINISTRATION".ACCOUNTING.BUDGET is also being dropped.
Domain "CORP.ADMINISTRATION".ACCOUNTING.CODE is also being dropped.
SQL>