ALTER TABLE REGIONS DROP PRIMARY KEY CASCADE; DROP TABLE REGIONS CASCADE CONSTRAINTS; CREATE TABLE REGIONS ( REGION_ID NUMBER(2) CONSTRAINT REGION_ID_NN NOT NULL, REGION_NAME VARCHAR2(25 BYTE) ); CREATE UNIQUE INDEX REG_ID_PK ON REGIONS (REGION_ID); ALTER TABLE REGIONS ADD ( CONSTRAINT REG_ID_PK PRIMARY KEY (REGION_ID) USING INDEX REG_ID_PK ENABLE VALIDATE); / ALTER TABLE COUNTRIES DROP PRIMARY KEY CASCADE; DROP TABLE COUNTRIES CASCADE CONSTRAINTS; CREATE TABLE COUNTRIES ( COUNTRY_ID CHAR(2 BYTE) CONSTRAINT COUNTRY_ID_NN NOT NULL, COUNTRY_NAME VARCHAR2(40 BYTE), REGION_ID NUMBER(2) ); CREATE UNIQUE INDEX COUNTRY_C_ID_PK ON COUNTRIES (COUNTRY_ID); ALTER TABLE COUNTRIES ADD ( CONSTRAINT COUNTRY_C_ID_PK PRIMARY KEY (COUNTRY_ID) USING INDEX COUNTRY_C_ID_PK ENABLE VALIDATE); ALTER TABLE COUNTRIES ADD ( CONSTRAINT COUNTR_REG_FK FOREIGN KEY (REGION_ID) REFERENCES REGIONS (REGION_ID) ENABLE VALIDATE); / ALTER TABLE LOCATIONS DROP PRIMARY KEY CASCADE; DROP TABLE LOCATIONS CASCADE CONSTRAINTS; CREATE TABLE LOCATIONS ( LOCATION_ID NUMBER(4), STREET_ADDRESS VARCHAR2(40 BYTE), POSTAL_CODE VARCHAR2(12 BYTE), CITY VARCHAR2(30 BYTE) CONSTRAINT LOC_CITY_NN NOT NULL, STATE_PROVINCE VARCHAR2(25 BYTE), COUNTRY_ID CHAR(2 BYTE) ); CREATE INDEX LOC_CITY_IX ON LOCATIONS (CITY); CREATE INDEX LOC_COUNTRY_IX ON LOCATIONS (COUNTRY_ID); CREATE UNIQUE INDEX LOC_ID_PK ON LOCATIONS (LOCATION_ID); CREATE INDEX LOC_STATE_PROVINCE_IX ON LOCATIONS (STATE_PROVINCE); ALTER TABLE LOCATIONS ADD ( CONSTRAINT LOC_ID_PK PRIMARY KEY (LOCATION_ID) USING INDEX LOC_ID_PK ENABLE VALIDATE); ALTER TABLE LOCATIONS ADD ( CONSTRAINT LOC_C_ID_FK FOREIGN KEY (COUNTRY_ID) REFERENCES COUNTRIES (COUNTRY_ID) ENABLE VALIDATE); / ALTER TABLE JOBS DROP PRIMARY KEY CASCADE; DROP TABLE JOBS CASCADE CONSTRAINTS; CREATE TABLE JOBS ( JOB_ID VARCHAR2(10 BYTE), JOB_TITLE VARCHAR2(35 BYTE) CONSTRAINT JOB_TITLE_NN NOT NULL, MIN_SALARY NUMBER(6), MAX_SALARY NUMBER(6) ); CREATE INDEX JOB_ID_PK ON JOBS (JOB_ID); ALTER TABLE JOBS ADD ( CONSTRAINT JOB_ID_PK PRIMARY KEY (JOB_ID) USING INDEX JOB_ID_PK ENABLE VALIDATE); / ALTER TABLE DEPARTMENTS DROP PRIMARY KEY CASCADE; DROP TABLE DEPARTMENTS CASCADE CONSTRAINTS; CREATE TABLE DEPARTMENTS ( DEPARTMENT_ID NUMBER(4), DEPARTMENT_NAME VARCHAR2(30 BYTE) CONSTRAINT DEPT_NAME_NN NOT NULL, MANAGER_ID NUMBER(6), LOCATION_ID NUMBER(4) ); CREATE UNIQUE INDEX DEPT_ID_PK ON DEPARTMENTS (DEPARTMENT_ID); ALTER TABLE DEPARTMENTS ADD ( CONSTRAINT DEPT_ID_PK PRIMARY KEY (DEPARTMENT_ID) USING INDEX DEPT_ID_PK ENABLE VALIDATE); / ALTER TABLE EMPLOYEES DROP PRIMARY KEY CASCADE; DROP TABLE EMPLOYEES CASCADE CONSTRAINTS; CREATE TABLE EMPLOYEES ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20 BYTE), LAST_NAME VARCHAR2(25 BYTE) CONSTRAINT EMP_LAST_NAME_NN NOT NULL, EMAIL VARCHAR2(25 BYTE) CONSTRAINT EMP_EMAIL_NN NOT NULL, PHONE_NUMBER VARCHAR2(20 BYTE), HIRE_DATE DATE CONSTRAINT EMP_HIRE_DATE_NN NOT NULL, JOB_ID VARCHAR2(10 BYTE) CONSTRAINT EMP_JOB_NN NOT NULL, SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(2,2), MANAGER_ID NUMBER(6), DEPARTMENT_ID NUMBER(4) ); CREATE INDEX EMP_DEPARTMENT_IX ON EMPLOYEES (DEPARTMENT_ID); CREATE UNIQUE INDEX EMP_EMAIL_UK ON EMPLOYEES (EMAIL); CREATE UNIQUE INDEX EMP_EMP_ID_PK ON EMPLOYEES (EMPLOYEE_ID); CREATE INDEX EMP_JOB_IX ON EMPLOYEES (JOB_ID); CREATE INDEX EMP_MANAGER_IX ON EMPLOYEES (MANAGER_ID); CREATE INDEX EMP_NAME_IX ON EMPLOYEES (LAST_NAME, FIRST_NAME); ALTER TABLE EMPLOYEES ADD ( CONSTRAINT EMP_SALARY_MIN CHECK (salary > 0) ENABLE VALIDATE, CONSTRAINT EMP_EMP_ID_PK PRIMARY KEY (EMPLOYEE_ID) USING INDEX EMP_EMP_ID_PK ENABLE VALIDATE, CONSTRAINT EMP_EMAIL_UK UNIQUE (EMAIL) USING INDEX EMP_EMAIL_UK ENABLE VALIDATE); ALTER TABLE DEPARTMENTS ADD ( CONSTRAINT DEPT_LOC_FK FOREIGN KEY (LOCATION_ID) REFERENCES LOCATIONS (LOCATION_ID) ENABLE VALIDATE, CONSTRAINT DEPT_MGR_FK FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEES (EMPLOYEE_ID) ENABLE VALIDATE); ALTER TABLE EMPLOYEES ADD ( CONSTRAINT EMP_DEPT_FK FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS (DEPARTMENT_ID) ENABLE VALIDATE, CONSTRAINT EMP_JOB_FK FOREIGN KEY (JOB_ID) REFERENCES JOBS (JOB_ID) ENABLE VALIDATE, CONSTRAINT EMP_MANAGER_FK FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEES (EMPLOYEE_ID) ENABLE VALIDATE); / ALTER TABLE JOB_HISTORY DROP PRIMARY KEY CASCADE; DROP TABLE JOB_HISTORY CASCADE CONSTRAINTS; CREATE TABLE JOB_HISTORY ( EMPLOYEE_ID NUMBER(6) CONSTRAINT JHIST_EMPLOYEE_NN NOT NULL, START_DATE DATE, END_DATE DATE, JOB_ID VARCHAR2(10 BYTE) CONSTRAINT JHIST_JOB_NN NOT NULL, DEPARTMENT_ID NUMBER(4) ); CREATE INDEX JHIST_DEPARTMENT_IX ON JOB_HISTORY (DEPARTMENT_ID); CREATE INDEX JHIST_EMPLOYEE_IX ON JOB_HISTORY (EMPLOYEE_ID); CREATE UNIQUE INDEX JHIST_EMP_ID_ST_DATE_PK ON JOB_HISTORY (EMPLOYEE_ID, START_DATE); CREATE INDEX JHIST_JOB_IX ON JOB_HISTORY (JOB_ID);
Write, Run & Share PL/SQL code online using OneCompiler's Oracle PL/SQL online editor and compiler for free. It's one of the robust, feature-rich online editor and compiler for Oracle PL/SQL running on latest version 23c (23.3.0.0). Getting started with the OneCompiler's Oracle PL/SQL editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'PL/SQL' and start writing code to learn and test online without worrying about tedious process of installation.
PL/SQL is procedural extension for SQL created by Oracle. It is by default embedded into the Oracle Database. PL/SQL program units are compiled and stored inside the Oracle Database which results in optimal execution times as the PL/SQL and SQL run within the same server process.
Following is the syntax structure for the PL/SQL code blocks
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;
DECLARE
message varchar2(100):= 'Hello, World!';
BEGIN
dbms_output.put_line(message);
END;
/
CREATE OR REPLACE FUNCTION
hello_user
(user_name IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
RETURN 'Hello ' || user_name;
END hello_user;
/
BEGIN
dbms_output.put_line(hello_user('Peter'));
END;
/
BEGIN
DBMS_OUTPUT.put_line (1/0);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('error is: ' || SQLERRM);
END;