تالار های تخصصی

متن مرتبط با «اوراکل» در سایت تالار های تخصصی نوشته شده است

اوراکل 23ai – امکان استفاده از توابع تجمیعی(نظیر SUM و AVG) بر روی نوع داده INTERVAL

  • تا قبل از نسخه 23ai نمی توانستیم از توابع تجمیعی نظیر SUM، AVG، MIN و MAX و … بر روی داده های با دیتاتایپ  INTERVAL استفاده کنیم و در صورت استفاده، به خطای ORA-00932 مواجه می شدیم. برای مثال می خواهیم بررسی کنیم اجرای جاب PURGE_LOG در یک ماه گذشته به صورت میانگین چقدر زمان برده است: SQL> select column_name,data_type from dba_tab_cols where table_name='DBA_SCHEDULER_JOB_RUN_DETAILS' and column_name='RUN_DURATION'; COLUMN_NAME DATA_TYPE --------------- ---------------------------------------- RUN_DURATION INTERVAL DAY(3) TO SECOND(0) SQL> select AVG(RUN_DURATION) from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name='PURGE_LOG'; 'ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND' در اوراکل نسخه 23ai این امکان وجود دارد تا از توابع تجمیعی بر روی نوع داده INTERVAL استفاده کنیم: SQL> select AVG(RUN_DURATION) from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name='PURGE_LOG'; AVG(RUN_DURATION) ------------------------------------------------ +000000000 00:00:01.419354839 بیشترین و کمترین زمان اجرای این JOB را هم می توان از طریق توابع MAX و MIN بدست آورد: SQL> select MAX(RUN_DURATION) from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name='PURGE_LOG'; MAX(RUN_DURATION) ----------------------------------- +000 00:00:03 SQL> select MIN(RUN_DURATION) from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name='PURGE_LOG'; MIN(RUN_DURATION) --------------------------------- +000 00:00:01 همچنین تابع SUM را هم می توان بر روی INTERVAL DataType استفاده, ...ادامه مطلب

  • نصب نسخه FREE اوراکل 23ai

  • در این متن قصد داریم مراحل نصب Oracle Database 23ai free را بر روی اوراکل لینوکس 8 توضیح دهیم در ابتدا باید متذکر شویم که حجم هر دیتابیس(PDB) در نسخه FREE نمی تواند بیشتر از 12GB شود و همچنین برای استفاده از RAM و CPU هم محدودیت دارد: RPM مربوطه را از سایت اوراکل دانلود می کنیم: برای نصب   23ai FREE، ابتدا باید پیش نیاز های نصب اوراکل نظیر نصب package، ایجاد کاربر oracle، تنظیم کرنل و… را انجام دهیم که با دانلود و اجرای oracle-database-preinstall-23ai-1.0-2.el8.x86_64.rpm می توانیم همه شرایط نصب اوراکل 23ai را فراهم کنیم البته قبل از نصب این RPM باید repository را ایجاد کنیم: vi /etc/yum.repos.d/rhel8.repo [InstallMedia-BaseOS] name=Red Hat Enterprise Linux 8 - BaseOS metadata_expire=-1 gpgcheck=0 enabled=1 baseurl=file:///dvd/BaseOS/ [InstallMedia-AppStream] name=Red Hat Enterprise Linux 8 - AppStream metadata_expire=-1 gpgcheck=0 enabled=1 baseurl=file:///dvd/AppStream/ با دستور زیر RPM را نصب می کنیم: [root@OEL8 source]# dnf -y install oracle-database-preinstall-23ai-1.0-2.el8.x86_64.rpm Last metadata expiration check: 79 days, 9:48:59 ago on Wed 14 Feb 2024 09:46:03 PM +0330. Dependencies resolved. ============================================================================================================================================== Package Architecture Version Repository Size ===============================================================================, ...ادامه مطلب

  • اوراکل 23c – بهبودی برای دستور CASE در PL/SQL

  • اوراکل در نسخه 23c قابلیت جدیدی را برای دستور CASE در محیط PL/SQL ارائه کرده است که در این متن با آن آشنا خواهیم شد. در ابتدا شکل ساده دستور CASE در PL/SQL را با یک مثال مرور می کنیم: declare VALUE number := 3; text varchar2(50); begin text := case VALUE when 1 then 'ONE' when 2 then 'TWO' when 3 then 'THREE' else 'NOT ONE, TWO NOR THREE' end; dbms_output.put_line(text); end; / THREE در این قطعه کد صرفا از عملگر مساوی استفاده شده است و برای استفاده از عملگرهای دیگر نظیر “>”، “<“، BETWEEN و IN باید از فرمت زیر که Searched CASE syntax نامیده می شود، استفاده کنیم: declare VALUE number := 3; text varchar2(50); begin text := case when VALUE < 0 OR VALUE > 5 then 'OUT OF RANGE' when VALUE in (1, 2) then 'ONE OR TWO' when VALUE between 0 and 3 then 'BETWEEN 0 AND 3 BUT NOT 1 NOR 2' else 'OTHER' end; dbms_output.put_line(text); end; / BETWEEN 0 AND 3 BUT NOT 1 NOR 2 همچنین می توان این کد را به فرمت زیر هم نوشت: declare VALUE number := 3; text varchar2(50); begin case when VALUE < 0 OR VALUE > 5 then text :='OUT OF RANGE'; when VALUE in (1, 2) then text :='ONE OR TWO'; when VALUE between 0 and 3 then text :='BETWEEN 0 AND 3 BUT NOT 1 NOR 2'; , ...ادامه مطلب

  • اوراکل 23c – ایجاد خودکار AWR Snapshot در سطح PDB

  • در زمان ارائه قابلیت Pluggable Database در نسخه 12cR1،ء AWR snapshotها صرفا در سطح CDB ایجاد می شدند و امکان ایجاد snapshot در سطح PDB وجود نداشت. در نسخه 12cR2 پارامتری به نام awr_pdb_autoflush_enabled اضافه شد که با تنظیم آن به مقدار TRUE، به صورت خودکار در سطح PDB هم AWR snapshot ایجاد می شود اما مقدار پیش فرض این پارامتر تا قبل از نسخه 23c برابر با FALSE بوده و در نسخه 23c به صورت پیش فرض فعال می باشد: SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Thu Sep 7 10:57:00 2023 SQL> show parameter awr_pdb_autoflush_enabled NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ awr_pdb_autoflush_enabled boolean TRUE با این تغییر در صورتی که اسکریپت awrrpt.sql را در هر کدام از PDBها اجرا کنیم، گزینه AWR_PDB مقدار پیش فرض خواهد بود: Specify the location of AWR Data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ AWR PDB reports can be generated using data stored in this PDB or ROOT. Please enter the desired location at the prompt. Default value is 'AWR_PDB'. AWR_PDB - Use AWR data from PDB AWR_ROOT - Use AWR data from ROOT Enter value for awr_location: AWR_PDB Location of AWR Data Specified: AWR_PDB اما در نسخه های قبلی، گزینه AWR_ROOT مقدار پیش فرض بوده است: Specify the location of AWR Data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ AWR_ROOT - Use AWR data from root (default) AWR_PDB - Use AWR data from PDB Enter value for awr_location: برای دیتابیسی با تعداد PDB زیاد و workload بسیار بالا، , ...ادامه مطلب

  • اوراکل 23c – قابلیت Dictionary Protection

  • زمانی که یکی از مجوزهای system “ANY” privilege نظیر select any table، drop any table و … را به کاربری می دهیم، آن کاربر امکان دسترسی به objectهای شمای sys و جداول Data Dictionary را ندارد: SQL*Plus: Release 10.1.0.4.2 - Production on Tue Jan 9 10:38:31 2024 SQL> show user USER is "SYS" SQL> create table sys.tb as select * from dual; Table created. SQL> create user usef identified by a; User created. SQL> grant create session,select any table to usef; Grant succeeded. SQL> conn usef/a Connected. SQL> select * from sys.tb; ORA-00942: table or view does not exist SQL> select * from v$datafile; ORA-00942: table or view does not exist اگر تصمیم داریم این محدودیت را حداقل در مورد مجوز select any table برای یک کاربر برداریم، می توانیم مجوز SELECT ANY DICTIONARY را به آن کاربر اعطا کنیم: SQL> grant SELECT ANY DICTIONARY to usef; Grant succeeded. SQL> conn usef/a Connected. SQL> select * from sys.tb; D - X SQL> select file# from v$datafile where rownum=1; FILE# ---------- 1 البته از اوراکل 12c، دسترسی به بعضی از جداول Data Dictionary حتی با داشتن مجوز  SELECT ANY DICTIONARY  هم امکان پذیر نیست. لیست بعضی از این جداول را در قسمت زیر می بینید: USER$, ENC$ , DEFAULT_PWD$, LINK$, USER_HISTORY$, CDB_LOCAL_ADMINAUTH$, XS$VERIFIERS نقش SELECT_CATALOG_ROLE هم می تواند دسترسی به ویوهای دیتادیکشنری را به کاربر اعطا کند که قبلا در مورد تفاوت این نقش با مجوز SELECT ANY DICTIONARY مطلبی را نوشته ایم. شکل پیشرفته تر از مجوز SELECT ANY DI, ...ادامه مطلب

  • اوراکل 23c – قابلیت Automatic List Partitioning برای جداول هیبریدی

  • Hybrid Partitioned Table قابلیت جدیدی است که اوراکل در نسخه 19c ارائه کرده است با کمک این قابلیت می توان برای یک جدول، تلفیقی از پارتیشنهای exteal و inteal را ایجاد کرد. این روش از پارتیشن بندی، صرفا متدهای Range و List را پشتیبانی می کند البته در نسخه 19c امکان استفاده از متد Automatic List برای Hybrid Partitioned Table وجود ندارد و این امکان از نسخه 23c به وجود آمد. بنابرین از این نسخه(23c) می توانیم برای جداول Hybrid Partitioned Table از قابلیت Automatic List Partitioning استفاده کنیم. قبل از ایجاد جدول مورد نظر، دایرکتوری مربوط به دیتایی که در سیستم عامل قرار دارند را ایجاد می کنیم: SQL> create directory E_PARTITIONs as '/PARTITIONs'; Directory created جدول mytbl از نوع هیبریدی است و  به روش Automatic List پارتیشن بندی شده است: SQL> CREATE TABLE mytbl 2 ( 3 national_id NUMBER, 4 name VARCHAR2(20), 5 last_name VARCHAR2(20), 6 org_id NUMBER 7 ) 8 EXTERNAL PARTITION ATTRIBUTES( 9 TYPE ORACLE_LOADER 10 DEFAULT DIRECTORY E_PARTITIONs 11 ACCESS PARAMETERS 12 ( 13 FIELDS TERMINATED BY ',' (national_id,name,last_name,org_id) 14 ) 15 REJECT LIMIT UNLIMITED 16 ) 17 PARTITION BY LIST (org_id) AUTOMATIC 18 ( 19 PARTITION p1 VALUES (1), 20 PARTITION p2 VALUES (2), 21 PARTITION p_exteal VALUES (3) EXTERNAL LOCATION('part1.txt') 22 ); Table created در صورت فعال نبودن قابلیت Automatic List Partitioning، ستون org_id صرفا مقادیر 1، 2 و 3 را قبول می کرد اما, ...ادامه مطلب

  • امکان تغییر رفتار پیش فرض kill session در اوراکل 23c

  • زمانی که sessionای را در اوراکل kill می کنیم، به صورت پیش فرض آن session در حالت SOFTء، kill خواهد شد: SQL> ALTER SYSTEM KILL SESSION '1025,44801'; System altered. جزییات اجرای این دستور را می توانیم در Alert Log ببنیم: 2023-12-19T13:32:18.731476+03:30 (4):A user has terminated a session. KILL SESSION for sid=(1025, 44801): Reason = alter system kill session Mode = KILL SOFT -/-/-/- Requestor = USER (orapid = 55, ospid = 3267554, inst = 1) User = oracle Program = sqlplus@OEL8 (TNS V1-V3) Owner = Process: USER (orapid = 75, ospid = 3268895) User = 462710969 Program = plsqldev.exe Result = ORA-0 برای kill کردن session در حالت HARD می توانیم عبارت immediate را به انتهای دستور اضافه کنیم: SQL> ALTER SYSTEM KILL SESSION '1025,43030' IMMEDIATE; System altered. مجددا با کمک Alert Log جزییات اجرای این دستور را هم خواهیم دید: 2023-12-19T13:33:07.749571+03:30 (4):A user has terminated a session. KILL SESSION for sid=(1025, 43030): Reason = alter system kill session Mode = KILL HARD SAFE -/-/-/- Requestor = USER (orapid = 55, ospid = 3267554, inst = 1) User = oracle Program = sqlplus@OEL8 (TNS V1-V3) Owner = Process: USER (orapid = 75, ospid = 3268940) User = 462710969 Program = plsqldev.exe Result = ORA-0 در نسخه 23c اوراکل Hidden Parameterای به نام kill_session_force_ را اضافه کرده است که می توان از طریق آن، این رفتار پیش فرض را تغییر داد: set linesize 1000 col Parameter format a20 col Session_Value format a14 col Instance, ...ادامه مطلب

  • اوراکل 23c – تخمین صرفه جویی در فضا با DEDUPLICATION

  • DEDUPLICATION یکی از قابلیتهای جدید اوراکل در نسخه 11g است که همراه با SECUREFILE LOBها ارائه شد و می توان بعد از ایجاد جدول هم این قابلیت را برای SECUREFILE LOBها فعال کرد اما سوال مهمی که در این زمینه مطرح می شود آن است که DEDUPLICATION برای LOBهای موجود چقدر فضا آزاد می کند؟ در اوراکل نسخه 23c، تابعی در این زمینه ارائه شد که می تواند تا حدودی به این سوال پاسخ دهد. این تابع نام جدول(و یا نام پارتیشنی از جدول) را دریافت می کند و حداکثر 100 هزار رکورد از آن جدول را بررسی کرده و نهایتا تخمینی از میزان ذخیره سازی فضا را ارائه می کند. در ادامه، سناریوی تستی را در این زمینه می بینید. SQL> create table tbl (id number,describe clob); Table created در این جدول اطلاعاتی را درج می کنیم که بیشتر آن تکراری هستند: SQL> begin 2 for i in 1 .. 70000 loop 3 insert into tbl 4 values 5 (1, 6 lpad('www.usefzadeh.com', 7 1000000000000000000000000000000000000000000000000000000000000000000000000000000000, 8 'a')); 9 end loop; 10 insert into tbl values (2, 'Ramtollah Rabbani'); 11 insert into tbl values (3, 'Armin Bahamin'); 12 insert into tbl values (4, 'Jamshid Khan'); 13 commit; 14 end; 15 / PL/SQL procedure successfully completed تعداد رکوردهای جدول: SQL> select count(*) from tbl; COUNT(*) ---------- 70003 برای محاسبه تخمین میزان فضای صرفه جویی شده پس از DEDUPLICATION، تابع dbms_lob.GET_LOB_DEDUPLICATION_RATIO را اجرا می کنیم: SQL> set serverout on SQL> DECLARE dedup_ratio n, ...ادامه مطلب

  • اوراکل 23c – پارامتر error_message_details برای نمایش جزییات خطا

  • error_message_details یکی دیگر از پارامترهای جدید اوراکل در نسخه 23c هست که امکان نمایش جزییات خطاهای مربوط به Data Value را فراهم می کند با تنظیم این پارامتر به مقدار on، می توانیم برای خطاهایی نظیر ORA-00001: unique constraint violated، مقداری که سبب رخ دادن این دسته از خطاها شده است را در متن خطا ببینیم. برای مثال، در سناریوی زیر، فعال بودن پارامتر error_message_details در پیدا کردن مقداری که باعث این خطا شده است کمک می کند: SQL> create table tbl1(id number primary key); Table created. SQL> variable B number; SQL> exec :B:=2547; PL/SQL procedure successfully completed. SQL> insert into tbl1 values(:B); 1 row created. SQL> insert into tbl1 values(:B); ERROR at line 1: 'ORA-00001: unique constraint (USEF.SYS_C008328) violated on table USEF.TBL1 columns (ID)' 'ORA-03301: (ORA-00001 details) row with column values (ID:2547) already exists' Help: https://docs.oracle.com/error-help/db/ora-00001/ در صورتی که پارامتر error_message_details غیر فعال شود، خطای فوق به شکل زیر نمایش داده می شود: SQL> alter system set error_message_details=DISALLOWED ; System altered. SQL> insert into tbl1 values(:B); 'ORA-00001: unique constraint (USEF.SYS_C008329) violated on table USEF.TBL1 columns (ID)' Help: https://docs.oracle.com/error-help/db/ora-00001/ وحید یوسف زادهارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:[email protected] بخوانید, ...ادامه مطلب

  • اوراکل 23c – بررسی وجود inconsistency در Data Dictionary

  • نازسازگاری در دیتادیکشنری امر متداولی نیست و به ندرت اتفاق می افتد اما در صورت رخ دادن می تواند بسیار چالش ساز باشد نمونه ای از این دست ناسازگاری که شاید شما هم با آن روبرو شده باشید، invalid reference است مثلا segmentای که اطلاعاتش در dba_objects موجود نیست.  تا قبل از نسخه 23c، این قبیل ناسازگاری ها را می توانستیم با اسکریپت hcheck.sql شناسایی کنیم. اما در اوراکل نسخه 23c، پکیجی به نام DBMS_DICTIONARY_CHECK(البته در 23.3) ارائه شد که با کمک آن می توانیم از consistency در دیتادیکشنری اطمینان حاصل کنیم. این پکیج پروسیجرهای متعددی دارد: SQL> desc DBMS_DICTIONARY_CHECK PROCEDURE CRITICAL PROCEDURE FULL PROCEDURE DUPLICATEDATAOBJ PROCEDURE IDNSEQOBJ PROCEDURE IDNSEQSEQ PROCEDURE INDEXPARTITIONSEG PROCEDURE INDEXSEG PROCEDURE INDINDPARMISMATCH PROCEDURE INDPARTOBJ PROCEDURE LOBSEG PROCEDURE MVIEW PROCEDURE NEXTOBJECT PROCEDURE NOSEGMENTINDEX PROCEDURE OBJECTNAMES PROCEDURE OBJERROR …. در این بین، پروسیجر FULL می تواند اطلاعات کاملی را در زمینه درستی Data Dictionary ارائه دهد که در ادامه نمونه ای از خروجی آن را مشاهده می کنید: SQL> set serveroutput on size unlimited SQL> exec DBMS_DICTIONARY_CHECK.FULL; dbms_dictionary_check on 06-DEC-2023 18:25:16 ---------------------------------------------- Catalog Version 23.0.0.0.0 (2300000000) db_name: FREE Is CDB?: YES CON_ID: 1 Container: CDB$ROOT Trace File: /opt/oracle/diag/rdbms/free/FREE/trace/FREE_ora_6267_DICTCHECK.trc Catalog Fixed Procedure Name Version, ...ادامه مطلب

  • قابلیت SQL Firewall در اوراکل 23c

  • SQL Firewall یکی دیگر از قابلیتهای جدید اوراکل در نسخه 23c است بر اساس این قابلیت می توانیم مجموعه ای از دستورات را به عنوان دستورات مجاز برای دیتابیس تعریف کنیم در این صورت کاربر نمی تواند دستور دیگری خارج از این مجموعه را اجرا کند حتی اگر این کاربر مجوز اجرای آن دستورات را داشته باشد. قصد داریم اقدامات کاربر Usef را تحت نظر بگیریم و تمامی دستورات اجرا شده توسط این کاربر را capture کنیم سپس با تنظیم SQL Firewall، به این کاربر اجازه ندهیم خارج از دستوراتی که capture شده اند، دستور جدیدی را اجرا کند. برای اجرای این سناریو، ابتدا محیط تست را آماده می کنیم. SQL> create user usef identified by a; User created. SQL> grant dba to usef; Grant succeeded. SQL> conn usef/a@OEL8:1521/TEHRANPDB Connected. SQL> create table usef.tbl1 as select * from dual; Table created. SQL> create table usef.tbl2 as select * from dual; Table created. SQL> create or replace procedure usef.prc1 as 2 text varchar2(100); 3 begin 4 select * into text from tbl1; 5 end; 6 / Procedure created. برای مدیریت SQL FIREWALL می توانیم از کاربر sys استفاده کنیم و یا کاربر جدیدی را ایجاد کنیم و با دادن مجوز sql_firewall_admin به این کاربر، اقدامات لازم را از طریق آن انجام دهیم. در قدم اول، کاربر usr_firewall را برای مدیریت SQL FIREWALL ایجاد می کنیم و دسترسی sql_firewall_admin را به آن اهدا می کنیم. SQL> create user usr_firewall identified by a; User created. SQL> grant create session,sql_firewall_admin to usr_firewall; Grant succeeded. برای فعال کردن SQL FIREWALL، از طر, ...ادامه مطلب

  • قابلیتهای جدید اوراکل 23c برای جداول Blockchain و Immutable

  • در این مطلب سعی داریم تعدادی از قابلیتهای جدید اوراکل 23c در زمینه جداول Blockchain و Immutable را مرور کنیم. امکان حذف  و اضافه کردن ستون به جداول Blockchain و Immutable در نسخه 23c می توان به جداول Blockchain ستونی را اضافه کرد(البته در version v2 این نوع از جداول): SQL> create blockchain table blockchaintb1 ( id number(10), desc1 varchar2(100) ) no drop until 20 days idle no delete until 20 days after insert hashing using "SHA2_512" version "v2"; Table created. SQL> alter table blockchaintb1 add (desc2 varchar2(1000)); Table altered. حذف ستون هم در این نسخه امکان پذیر است: SQL> alter table blockchaintb1 drop column desc2; Table altered. در صورت درج اطلاعات در این نوع از جداول، باز هم می توان عملیات فوق را تکرار کرد: SQL> insert into blockchaintb1 values(1,'Amir Hozhabri','Sori Masoud'); 1 row created. SQL> commit; Commit complete. SQL> alter table blockchaintb1 drop column desc2; Table altered. نکته: برای مشاهده version هر کدام از Blockchain Tableها می توان از ویوی user_blockchain_tables استفاده کرد(user_blockchain_tables.TABLE_VERSION). قابلیت فوق برای version V2 جداول immutable هم به وجود آمد: SQL> create immutable table Immtb1 ( id number(10), desc1 varchar2(100) ) no drop until 200 days idle no delete until 200 days after insert version "v2"; Table created. SQL> alter table Immtb1 add (desc2 varchar2(1000)); Table altered. SQL> alter table Immtb1 drop column desc2; Table altered. تنظیم حداکثر مدت زمان برای idle, ...ادامه مطلب

  • قابلیت Shrink کردن Bigfile tablespace در اوراکل 23c

  • از نسخه های قدیمی اوراکل امکان resize کردن دیتافایلها وجود دارد: SQL*Plus: Release 10.1.0.4.2 - Production on Tue Nov 21 11:15:16 2023 SQL> select bytes/1024/1024 SIZE_MB from v$datafile where file#=29; SIZE_MB ---------- 1024 SQL> alter database datafile 29 resize 120m; Database altered. SQL> select bytes/1024/1024 SIZE_MB from v$datafile where file#=29; SIZE_MB ---------- 120 البته resize کردن دیتافایلها همیشه با موفقیت انجام نمی شود و بعضا با آزاد بودن درصد بالایی از فضای دیتافایل، به دلیل قرار گرفتن بعضی از بلاکهای segment بر سر High Water Mark، امکان کاهش سایز دیتافایل وجود ندارد و در این حالت به خطای زیر برخواهیم خورد: SQL> alter database datafile 1 resize 10m; ORA-03297: file contains used data beyond requested RESIZE value برای جلوگیری از خطای ORA-03297، باید segmentای که بر سر راه High Water Mark قرار دارد را جابجا کنیم! که البته قبلا در مطلبی به طور مفصل این مسئله را بررسی کردیم و از تکرار آن خودداری می کنیم. مسئله ای که در این متن به آن خواهیم پرداخت، موضوع shrink کردن در سطح tablespaceها است. در نسخه 11g امکان shrink کردن Temporary tablespaceها به وجود آمد: SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 21 10:35:57 2023 SQL> select FILE#,BYTES/1024/1024 from v$tempfile where file#=5; FILE# BYTES/1024/1024 ---------- --------------- 5 5120 SQL> ALTER TABLESPACE Temp_TBS SHRINK SPACE KEEP 340m; Tablespace altered. SQL> select FILE#,BYTES/1024/1024 from v$tempfile where file#=5; FILE# BYTES/1, ...ادامه مطلب

  • اوراکل 23c – اضافه شدن کلمه کلیدی ORDERED به تابع JSON_SERIALIZE

  •  تابع JSON_SERIALIZE در اوراکل نسخه 19c ارائه شد این تابع دیتای JSON را در هر دیتاتایپی که باشد، به صورت متن نمایش می دهد: SQL> create table tbl_JSON (id number,ettelaat BLOB constraint jc1 check (ettelaat is json) ); Table created SQL> insert into tbl_JSON values(2,'{"First_Name":"Vahid","Last_Name":"Usefzadeh","Contact":{"Email":"[email protected]","Phone":"091111111117"}}'); 1 row inserted SQL> select ETTELAAT from tbl_JSON; ETTELAAT ----------------------------------- 7B2246697273745F4E616D65223A225661686964222C224C6173745F4E616D65223A22557365667A61646568222C22436F6E74616374223A7B22456D61696C223A227661686964757365667A61646568 با استفاده از تابع JSON_SERIALIZE می توان اطلاعات باینری فوق را به صورت متن نمایش داد: SQL> select json_serialize(ETTELAAT) ETTELAAT from tbl_JSON; ETTELAAT -------------------------------------------------------------------------------- {"First_Name":"Vahid","Last_Name":"Usefzadeh","Contact":{"Email":"[email protected]","Phone":"091111111117"}} با اضافه کردن عبارت pretty خروجی فوق به صورت شکیل تر به نمایش در خواهد آمد: SQL> select json_serialize(ETTELAAT pretty) ETTELAAT from tbl_JSON; ETTELAAT ------------------------------------ { "First_Name" : "Vahid", "Last_Name" : "Usefzadeh", "Contact" : { "Email" : "[email protected]", "Phone" : "091111111117" } } در اوراکل 23c عبارت ordered هم اضافه شد که ترتیب نمایش ستونها را می توان از طریق آن تغییر داد: SQL> select json_serialize(ETTELAAT, ...ادامه مطلب

  • اوراکل 23c – بهبودهایی در زمینه DML RETURNING INTO

  • از نسخه های قدیمی اوراکل امکان استفاده از عبارت RETURNING INTO به همراه دستورات DMLای وجود داشت که در قسمت زیر نحوه استفاده از آن را می بینید: SQL*Plus: Release 10.1.0.4.2 - Production on Tue Aug 15 14:08:30 2023 SQL> select * from tbl1; ID NAME ---------- ---------- 1 Vahid 2 Usef SQL>declare var_id number; var_name varchar2(10); begin --Update update tbl1 set name='ALI' where id=2 retuing name into var_name; dbms_output.put_line('After_Update==>' || name='||var_name); --Delete delete tbl1 where id=1 retuing name into var_name; dbms_output.put_line('Before_Delete==>' || name='||var_name); --Insert insert into tbl1 values(3,'Reza') retuing id,name into var_id,var_name; dbms_output.put_line('INSERT==> id='||var_id||' , name='||var_name); commit; end; / After_Update==>name=ALI Before_Delete==> name=Vahid INSERT==> id=3 , name=Reza SQL> select * from tbl1; ID NAME ---------- ---------- 2 ALI 3 Reza در اوراکل 23c بهبودی در این زمینه ایجاد شد اوراکل دو عبارت OLD  و  NEW را هم در این زمینه اضافه کرده است برای دستور Update می توان از هر دو عبارت OLD  و  NEW استفاده کرد همچنین عبارت NEW برای دستور Insert و عبارت OLD برای دستور Delete قابل استفاده هستند. syntax کلی عبارت RETURNING INTO در اوراکل 10g و 23c را در قسمت زیر مشاهده می کنید: Oracle 10g: RETURNING <exprs> INTO <data_items>; Oracle 23c: ( RETURN | R, ...ادامه مطلب

  • جدیدترین مطالب منتشر شده

    گزیده مطالب

    تبلیغات

    برچسب ها