Im zweiten Teil des Einführungstutorials geht es um die Ausführung von DDL Anweisungen über das Modul SQL Commander.
In diesem Teil des Tutorials soll der Rest des Datenmodells angelegt werden. Hierzu kommt zu Anschauungszwecken das Werkzeug SQL Commands zum Einsatz.
SQL Commands
Im ersten Teil der Beitragsreihe ging es darum eine Tabelle mit dem Objects Browser zu erzeugen. APEX bietet unter dem SQL-Workshop neben diesem Tool mit dem SQL Commands ein weiteres Werkzeug mit dem Sie direkt mit der Datenbank interagieren können.

Über das Tool SQL Commands ist es möglich einfach Freihand SQL Befehle und SQL-Scripte auszuführen.

Im oberen Textfeld können Sie SQL bzw. PL/SQL Befehle eingeben. Über den Button Run führen Sie diese aus.
Mit Find Tables können Sie sich die Tabellen Ihres Workspaces anzeigen lassen. Klicken Sie in der Übersicht von “Find Tables” auf den Tabellennamen wird Ihnen die Struktur der Tabelle präsentiert.

Die Skripte, die Sie mit SQL Commands erstellt haben, lassen sich in APEX über die Schaltfläche Save speichern. Laden können Sie diese dann über den Tab Saved SQL.
Tabellen und Trigger anlegen
Das folgende SQL-Skript (Listing 1) erzeugt für die noch fehlenden Tabellen ingredients, processing_steps und product_classification. Zu jeder Tabelle wird je ein Trigger angelegt, über den ein künstlicher Schlüssel als Primärschlüssel erzeugt wird.
Das Skript habe ich mit einem weiteren APEX-Tool namens Quick SQL erzeugt. Anschließend habe ich noch einige kleine manuellen Anpassungen vorgenommen. Wenn Sie sich näher mit der schnellen Erzeugung von Datenmodellen beschäftigen möchten, werden Sie doch einfach mal einen (lohnenswerten) Blick auf den Beitrag Oracle Apex – Quick SQL.
-- create tables create table co_processing_step ( id number not null constraint co_processing_step_id_pk primary key, name varchar2(255), description varchar2(4000), media_name varchar2(255), media_object blob, media_filename varchar2(255), media_mime_type varchar2(48), media_size number, media_content_type varchar2(4000), order_number number, created date not null, created_by varchar2(255) not null, updated date not null, updated_by varchar2(255) not null ) ; create table co_ingredients ( id number not null constraint co_ingredients_id_pk primary key, processing_step_id number constraint co_ingredient_processing_st_fk references co_processing_step on delete cascade, name varchar2(255), quantity number, quantity_unit varchar2(10), calories number, product_classification_id number, created date not null, created_by varchar2(255) not null, updated date not null, updated_by varchar2(255) not null ) ; create table co_product_classification ( id number not null constraint co_product_classif_id_pk primary key, name varchar2(255), description varchar2(4000), created date not null, created_by varchar2(255) not null, updated date not null, updated_by varchar2(255) not null ) ; CREATE SEQUENCE co_processing_step_seq ORDER; CREATE SEQUENCE co_ingredients_seq ORDER; CREATE SEQUENCE product_classification_seq ORDER; -- triggers create or replace trigger co_processing_step_biu before insert or update on co_processing_step for each row begin if :new.id is null then select co_processing_step_seq.nextval into :new.id from dual; end if; if inserting then :new.created := sysdate; :new.created_by := nvl(sys_context('APEX$SESSION','APP_USER'),user); end if; :new.updated := sysdate; :new.updated_by := nvl(sys_context('APEX$SESSION','APP_USER'),user); end co_processing_step_biu; / create or replace trigger co_ingredients_biu before insert or update on co_ingredients for each row begin if :new.id is null then select co_ingredients_seq.nextval into :new.id from dual; end if; if inserting then :new.created := sysdate; :new.created_by := nvl(sys_context('APEX$SESSION','APP_USER'),user); end if; :new.updated := sysdate; :new.updated_by := nvl(sys_context('APEX$SESSION','APP_USER'),user); end co_ingredients_biu; / create or replace trigger co_product_classification_biu before insert or update on co_product_classification for each row begin if :new.id is null then select product_classification_seq.nextval into :new.id from dual; end if; if inserting then :new.created := sysdate; :new.created_by := nvl(sys_context('APEX$SESSION','APP_USER'),user); end if; :new.updated := sysdate; :new.updated_by := nvl(sys_context('APEX$SESSION','APP_USER'),user); end co_product_classification_biu; / -- indexes create index co_ingredients_i1 on co_ingredients (processing_step_id); create index co_product_classification_i1 on co_product_classification (ingredient_id);
Listing 1: Create ingredients , processing_steps, …
Kopieren Sie den Inhalt des Skriptes in den Eingabebereich des SQL Commands und klicken Sie dann auf Run.

Sie bekommen anschließend eine Zusammenfassung und mögliche Fehlermeldungen angezeigt.
Select-Statements ausführen
Über das Tool SQL Commands lassen sich aber auch Select-Anweisungen entwickeln und ausführen.
Um zu prüfen, welche Tabellen in Ihrem Schema vorhanden sind, können Sie beispielsweise dieses Select-Staement bemühen.
select * from user_tables where table_name like 'CO%'
Führen Sie es einfach in SQL Commands aus. Das Ergebnis wird Ihnen als Tabelle angezeigt.

Beitragsreihe
[catlist name=”Apex 18.2 Tutorial”]