Artarad_oracle_23c

بررسی شرط 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

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *