مسعود سلطانی راد
مسعود سلطانی راد
خواندن ۲ دقیقه·۱۰ ماه پیش

بررسی شرط IF NOT EXISTS و IF EXISTS در دستورات DDL در پایگاه داده Oracle 23C


یکی از خطاها در زمان ایجاد یا حذف 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

oracle databaseخدمات اوراکلمشاوره اوراکلخدمات پشتیبانی اوراکلمسعود سلطانی راد
چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
شاید از این پست‌ها خوشتان بیاید