admin_pkg-Package wird erstellt
In diesem Abschnitt wird gezeigt, wie das admin_pkg-Package erstellt wird, wie seine Unterprogramme funktionieren, wie dem Benutzer, der es benötigt, die Berechtigung EXECUTE für das Package erteilt wird und wie dieser Benutzer eines seiner Unterprogramme aufrufen kann.
So erstellen Sie das admin_pkg-Paket:
-
Stellen Sie als Benutzer app_admin eine Verbindung zu Oracle AI Database her.
Eine Anleitung finden Sie unter "Verbindung mit Oracle AI Database aus SQL*Plus herstellen" oder "Verbindung mit Oracle AI Database aus SQL Developer herstellen".
-
Erstellen Sie diese Synonyme:
CREATE SYNONYM departments FOR app_data.departments; CREATE SYNONYM jobs FOR app_data.jobs; CREATE SYNONYM departments_sequence FOR app_data.departments_sequence;Sie können die CREATE SYNONYM-Anweisungen entweder in SQL*Plus oder im Arbeitsblatt von SQL Developer eingeben. Alternativ können Sie die Tabellen mit dem SQL Developer-Tool "Synonym erstellen" erstellen.
-
Erstellen Sie die Packagespezifikation.
-
Erstellen Sie den Package Body.
Siehe:
Packagespezifikation für admin_pkg wird erstellt
Hinweis: Sie müssen als Benutzer app_admin bei der Datenbank angemeldet sein.
Um die Packagespezifikation für admin_pkg, die API für Anwendungsadministratoren, zu erstellen, verwenden Sie die folgende CREATE PACKAGE-Anweisung. Sie können die Anweisung entweder in SQL*Plus oder im Arbeitsblatt von SQL Developer eingeben. Alternativ können Sie das Package mit dem SQL Developer-Tool {\b Create Package} erstellen.
CREATE OR REPLACE PACKAGE admin_pkg
AS
PROCEDURE update_job
( p_job_id IN jobs.job_id%TYPE,
p_job_title IN jobs.job_title%TYPE := NULL,
p_min_salary IN jobs.min_salary%TYPE := NULL,
p_max_salary IN jobs.max_salary%TYPE := NULL );
PROCEDURE add_job
( p_job_id IN jobs.job_id%TYPE,
p_job_title IN jobs.job_title%TYPE,
p_min_salary IN jobs.min_salary%TYPE,
p_max_salary IN jobs.max_salary%TYPE );
PROCEDURE update_department
( p_department_id IN departments.department_id%TYPE,
p_department_name IN departments.department_name%TYPE := NULL,
p_manager_id IN departments.manager_id%TYPE := NULL,
p_update_manager_id IN BOOLEAN := FALSE );
FUNCTION add_department
( p_department_name IN departments.department_name%TYPE,
p_manager_id IN departments.manager_id%TYPE )
RETURN departments.department_id%TYPE;
END admin_pkg;
/
Siehe:
-
Oracle AI Database PL/SQL Language Reference für Informationen über die CREATE PACKAGE-Anweisung
Package Body für admin_pkg wird erstellt
Hinweis: Sie müssen als Benutzer app_admin bei der Datenbank angemeldet sein.
Um den PACKAGE BODY für admin_pkg, die API für Anwendungsadministratoren, zu erstellen, verwenden Sie die folgende Anweisung CREATE PACKAGE BODY. Sie können die Anweisung entweder in SQL*Plus oder im Arbeitsblatt von SQL Developer eingeben. Alternativ können Sie das Package mit dem SQL Developer-Tool {\b Create Body} erstellen.
CREATE OR REPLACE PACKAGE BODY admin_pkg
AS
PROCEDURE update_job
( p_job_id IN jobs.job_id%TYPE,
p_job_title IN jobs.job_title%TYPE := NULL,
p_min_salary IN jobs.min_salary%TYPE := NULL,
p_max_salary IN jobs.max_salary%TYPE := NULL )
IS
BEGIN
UPDATE jobs
SET job_title = NVL( p_job_title, job_title ),
min_salary = NVL( p_min_salary, min_salary ),
max_salary = NVL( p_max_salary, max_salary )
WHERE job_id = p_job_id;
END update_job;
PROCEDURE add_job
( p_job_id IN jobs.job_id%TYPE,
p_job_title IN jobs.job_title%TYPE,
p_min_salary IN jobs.min_salary%TYPE,
p_max_salary IN jobs.max_salary%TYPE )
IS
BEGIN
INSERT INTO jobs ( job_id, job_title, min_salary, max_salary )
VALUES ( p_job_id, p_job_title, p_min_salary, p_max_salary );
END add_job;
PROCEDURE update_department
( p_department_id IN departments.department_id%TYPE,
p_department_name IN departments.department_name%TYPE := NULL,
p_manager_id IN departments.manager_id%TYPE := NULL,
p_update_manager_id IN BOOLEAN := FALSE )
IS
BEGIN
IF ( p_update_manager_id ) THEN
UPDATE departments
SET department_name = NVL( p_department_name, department_name ),
manager_id = p_manager_id
WHERE department_id = p_department_id;
ELSE
UPDATE departments
SET department_name = NVL( p_department_name, department_name )
WHERE department_id = p_department_id;
END IF;
END update_department;
FUNCTION add_department
( p_department_name IN departments.department_name%TYPE,
p_manager_id IN departments.manager_id%TYPE )
RETURN departments.department_id%TYPE
IS
l_department_id departments.department_id%TYPE;
BEGIN
INSERT INTO departments ( department_id, department_name, manager_id )
VALUES ( departments_sequence.NEXTVAL, p_department_name, p_manager_id )
RETURNING department_id INTO l_department_id;
RETURN l_department_id;
END add_department;
END admin_pkg;
/
Siehe:
-
Oracle AI Database PL/SQL Language Reference für Informationen über die Anweisung CREATE PACKAGE BODY
Tutorial: Funktionsweise der Unterprogramme admin_pkg anzeigen
In diesem Tutorial wird mit SQL*Plus gezeigt, wie die Unterprogramme des admin_pkg-Packages funktionieren. Das Tutorial zeigt auch, wie der Trigger jobs_aufer funktioniert.
Hinweis: Sie müssen über SQL*Plus als Benutzer app_admin bei der Datenbank angemeldet sein.
So zeigen Sie die Funktionsweise der Unterprogramme admin_pkg an:
-
Informationen zu dem Job mit der ID AD_VP anzeigen:
SELECT * FROM jobs WHERE job_id = 'AD_VP';Ergebnis:
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- AD_VP Administration Vice President 15000 30000 -
Erhöhen Sie das Höchstgehalt für diese Tätigkeit, und zeigen Sie die entsprechenden Informationen erneut an:
EXEC admin_pkg.update_job( 'AD_VP', p_max_salary => 31000 ); SELECT * FROM jobs WHERE job_id = 'AD_VP';Ergebnis:
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- AD_VP Administration Vice President 15000 31000 -
Informationen über den Job mit der ID IT_PROG anzeigen:
SELECT * FROM jobs WHERE job_id = 'IT_PROG';Ergebnis:
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- IT_PROG Programmer 4000 10000 -
Versuchen Sie, das Höchstgehalt für diese Tätigkeit zu erhöhen:
EXEC admin_pkg.update_job( 'IT_PROG', p_max_salary => 4001 );Ergebnis (aus SQL*Plus):
SQL> EXEC admin_pkg.update_job( 'IT_PROG', p_max_salary => 4001 ); BEGIN admin_pkg.update_job( 'IT_PROG', p_max_salary => 4001 ); END; * ERROR at line 1: ORA-20001: Salary update would violate 5 existing employee records ORA-06512: at "APP_DATA.JOBS_AUFER", line 12 ORA-04088: error during execution of trigger 'APP_DATA.JOBS_AUFER' ORA-06512: at "APP_ADMIN.ADMIN_PKG", line 10 ORA-06512: at line 1 -
Fügen Sie einen neuen Job hinzu, und zeigen Sie die Informationen dazu an:
EXEC admin_pkg.add_job( 'AD_CLERK', 'Administrative Clerk', 3000, 7000 ); SELECT * FROM jobs WHERE job_id = 'AD_CLERK';Ergebnis:
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- AD_CLERK Administrative Clerk 3000 7000 -
Informationen zu Abteilung 100 anzeigen:
SELECT * FROM departments WHERE department_id = 100;Ergebnis:
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID ------------- ------------------------------ ---------- 100 Finance 108 -
Ändern Sie den Namen und den Manager der Abteilung 100, und zeigen Sie die Informationen dazu an:
EXEC admin_pkg.update_department( 100, 'Financial Services' ); EXEC admin_pkg.update_department( 100, p_manager_id => 111, p_update_manager_id => true ); SELECT * FROM departments WHERE department_id = 100;Ergebnis:
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID ------------- ------------------------------ ---------- 100 Financial Services 111
Siehe auch: "Packages erstellen und verwalten"
Erteilen der EXECUTE-Berechtigung für app_admin_user
Hinweis: Sie müssen als Benutzer app_admin bei der Datenbank angemeldet sein.
Um app_admin_user (einem Anwendungsadministrator) die Berechtigung EXECUTE für das Package admin_pkg zu erteilen, verwenden Sie die folgende GRANT-Anweisung. Sie können die Anweisung entweder in SQL*Plus oder im Arbeitsblatt von SQL Developer eingeben.
GRANT EXECUTE ON admin_pkg TO app_admin_user;
Siehe:
-
Oracle AI Database SQL Language Reference für Informationen über die GRANT-Anweisung
Tutorial: add_department wird als app_admin_user aufgerufen
Mit SQL*Plus zeigt dieses Tutorial, wie Sie die Funktion app_admin.admin_pkg.add_department als Benutzer app_admin_user (ein Anwendungsadministrator) aufrufen und dann die Informationen zur neuen Abteilung anzeigen.
So rufen Sie admin_pkg.add_department als app_admin_user auf:
-
Stellen Sie über SQL*Plus eine Verbindung zu Oracle AI Database als Benutzer app_admin_user her.
Eine Anleitung finden Sie unter "Verbindung mit Oracle AI Database aus SQL*Plus herstellen".
-
Erstellen Sie dieses Synonym:
CREATE SYNONYM admin_pkg FOR app_admin.admin_pkg; -
Bind-Variable für den Rückgabewert der Funktion deklarieren:
VARIABLE n NUMBER -
Neue Abteilung ohne Manager hinzufügen:
EXEC :n := admin_pkg.add_department( 'New department', NULL ); -
Zeigen Sie die ID des Managers der neuen Abteilung an:
PRINT :nErgebnis:
N ---------- 275
So zeigen Sie die Informationen zur neuen Abteilung an:
-
Melden Sie sich bei der Datenbank als Benutzer app_admin an.
-
Informationen zur neuen Abteilung anzeigen:
SELECT * FROM departments WHERE department_name LIKE 'New department%';Ergebnis:
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID ------------- ------------------------------ ---------- 275 New department