یکی از خطاها در زمان ایجاد یا حذف Object در پایگاه داده اوراکل این است که Object با همان نام وجود داشته و یا وجود نداشته باشد. در این حالت اجرای دستور با خطا مواجه می شود. اوراکل در نسخه ۲۳C خود قابلیت اضافه کردن شرط های IF NOT EXISTS وIF EXISTS را اضافه کرده در صورت وجود و یا عدم وجود Object، اجرای دستور دچار خطا نشود. در ادامه این قابلیت را مورد بررسی قرار خواهیم داد.
آموزش نصب و راه اندازی اوراکل ۲۳c بر روی لینوکس
در ابتدا کاربر و Objects مورد نظر را ایجاد می کنیم
CREATE USER SOLTANI
IDENTIFIED BY 123
HTTP DIGEST DISABLE
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT CONNECT TO SOLTANI;
GRANT DBA TO SOLTANI;
GRANT RESOURCE TO SOLTANI;
ALTER USER SOLTANI DEFAULT ROLE ALL;
GRANT UNLIMITED TABLESPACE TO SOLTANI;
در ادامه اشیا مورد نیاز را ایجاد می کنیم.
CREATE TABLE SOLTANI.TEST1
(
ID NUMBER,
FULLNAME VARCHAR2 (50)
);
CREATE SEQUENCE SOLTANI.TEST1_SEQ;
CREATE VIEW SOLTANI.TEST1_V
AS
SELECT * FROM SOLTANI.TEST1;
CREATE PROCEDURE SOLTANI.PR_TEST1
AS
BEGIN
DBMS_OUTPUT.PUT_LINE (‘HELLO ARTARAD’);
END;
/
حال دستورات ایجاد مجدد اشیا را تکرار می کنیم. در حالت همانطور که مشاهده خواهید کرد، اجرای دستورات با خطا مواجه خواهند شد.
CREATE TABLE SOLTANI.TEST1
(
ID NUMBER,
FULLNAME VARCHAR2 (50)
);
ORA-00955: name is already used by an existing object
CREATE VIEW SOLTANI.TEST1_V
AS
SELECT * FROM SOLTANI.TEST1;
ORA-00955: name is already used by an existing object
در نسخه ۲۳c امکان اضافه کردن شرط های IF NOT EXISTS وIF EXISTS را داریم. حال دستورات را با این شرط ها اجرا می کنیم.
CREATE TABLE IF NOT EXISTS SOLTANI.TEST1
(
ID NUMBER,
FULLNAME VARCHAR2 (50)
);
Table created.
CREATE VIEW IF NOT EXISTS SOLTANI.TEST1_V
AS
SELECT * FROM SOLTANI.TEST1;
View created.
همانطور که مشاهده کردید، دستورات بدون خطا اجرا شدند.
جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد
نکته: بدون خطا بودن اجرا دستورات به معنی تغییر اشیا گذشته نمی باشد و آنها همچنان بدون تغییر باقی می مانند فقط اجرای دستورات بدون خطا خواهد بود.
حال فرض کنید یک Object که وجود ندارد را می خواهیم حذف کنیم. در حالت عادی با خطا مواجه خواهیم شد.
drop table if exists soltani.test2 purge;
ORA-00942: table or view does not exist
حال این دستور را با شرط IF EXISTS اجرا می کنیم و مشاهده خواهیم کرد بدون خطا می شود.
drop table if exists soltani.test2 purge;
Table dropped.
نکته : در زمانی که از دستور CREATE OR REPLACE استفاده می شود، نمی توانیم از شرط های IF NOT EXISTS وIF EXISTS استفاده کنیم.
CREATE OR REPLACE PROCEDURE IF NOT EXISTS SOLTANI. PR_TEST1
AS
BEGIN
DBMS_OUTPUT.PUT_LINE (‘HELLO ARTARAD’);
END;
ORA-11541: REPLACE and IF NOT EXISTS cannot coexist in the same DDL statement