در این قسمت تابع (FUNCTION) در PL/SQL را توضیح می دهیم. تابع از هر لحاظ مانند پروسیجر است با این تفاوت که برخلاف پروسیجر، یک مقدار برگردانده می شود.
بنابراین تمام مطالبی که در قسمت هفتم آموزش PL/SQL توضیح داده شد در مورد تابع نیز صادق است. (بیشتر…)
……..آموزش، مشاوره و پشتیبانی…….
در این قسمت تابع (FUNCTION) در PL/SQL را توضیح می دهیم. تابع از هر لحاظ مانند پروسیجر است با این تفاوت که برخلاف پروسیجر، یک مقدار برگردانده می شود.
بنابراین تمام مطالبی که در قسمت هفتم آموزش PL/SQL توضیح داده شد در مورد تابع نیز صادق است. (بیشتر…)
شرایط زیر را در نظر بگیرید:
SQL> create table jadval1 (id number,name varchar2(14),last_name varchar2(14));
Table created
SQL> insert into jadval1 select level,’VAHID’,’USEFZADEH’ from dual connect by level <=10000;
10000 rows inserted
SQL> commit;
Commit complete
SQL> create index ind_id on jadval1(id);
Index created
در چنین شرایطی قصد داریم ستون id را به عنوان primary key تعریف کنیم:
SQL> alter table JADVAL1 add constraint pk primary key (ID);
Table altered
اگر پارامترهای PASSWORD_REUSE_MAX و یا PASSWORD_REUSE_TIME را برای پروفایلی تنظیم کنیم، شکل hash شده پسورد کاربرانی که عضو ان پروفایل هستند در جدولی از دیتابیس به نام $user_history ثبت خواهد شد و از این طریق امکان برگرداندن پسورد کاربر به مقدار قبلی هم به وجود خواهد آمد:
SQL> alter profile default limit PASSWORD_REUSE_TIME 10;
Profile altered
SQL> alter user usef identified by d;
User altered
SQL> select user#,substr(password,1,12) password ,password_date from user_history$;
USER# PASSWORD PASSWORD_DATE
———- ————————–
120 T:0A20744AD0 09/20/2020 09
120 T:E5A3AF0A52 09/20/2020 09
120 T:CBCAAC7888 09/20/2020 09
برای برگرداندن پسورد کاربر به مقدار قبلی، می توان دستور alter user را به همراه عبارت identified by values اجرا کرد.
alter user user_name identified by values “user_history$.passowrd”;
با تنظیم پارامترهای *_PASSWORD_REUSE به مقدار unlimited، پسورد جدیدی در جدول $user_history ذخیره نخواهد شد.
همانطور که می دانید، با اجرای دستور “sqlplus “/as sysdba در محیط container database، به صورت پیش فرض به root container متصل خواهیم شد:
[oracle@OL7 ~]$ sqlplus “/as sysdba”
SQL*Plus: Release 18.0.0.0.0 – Production on Sun Sep 13 15:52:16 2020
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production
Version 18.5.0.0.0
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
SQL> show con_id
CON_ID
——————————
1
در این قسمت پروسیجر(PROCEDURE) و روش استفاده از آن را توضیح می دهیم ولی در ابتدا لازم است با مفهوم زیربرنامه یا SUBPROGRAM آشنا باشیم.
در زبان PL/SQL، زیربرنامه یک واحد از برنامه است که کار خاصی را انجام می دهد. برنامه های اصلی از ترکیب این زیربرنامه ها تشکیل می شوند و به این ترتیب مفهوم طراحی MODULAR شکل می گیرد. هر زیربرنامه می تواند بوسیله یک برنامه یا توسط یک زیربرنامه دیگر اجرا شود.
زیربرنامه های PL/SQL در واقع بلاک های PL/SQL هستند که برای آنها یک نام در نظر گرفته می شود و می توانند با تعدادی پارامتر فراخوانی شوند.
ارتقا نسخه Grid Infrastructure به نسخه بالاتر ممکن است به دلیل فراهم نبودن پیش نیازهای لازم، با خطا مواجه شود از این رو اوراکل در نسخه 19c قابلیت جدیدی را در این زمینه ارائه کرد که با کمک آن می توان قبل از ارتقای نسخه Grid Infrastructure، عملیات ارتقا را به صورت Dry-Run اجرا کرد تا قبل از انجام عملیات ارتقا، خطاهای احتمالی را شناسایی و برطرف شود.
در ادامه نحوه انجام این کار را مشاهده می کنید.
[grid@RAC1 ~]$ cd /grid19c/home/
[grid@RAC1 home]$ ./gridSetup.sh -dryRunForUpgrade
Launching Oracle Grid Infrastructure Setup Wizard…
رشته (STRING)، تعداد مشخصی از داده های کاراکتری است. کاراکترهای رشته می توانند از نوع عددی، حروف، جای خالی یا ترکیبی از آنها باشند. در PL/SQL سه نوع رشته داریم:
1.رشته های از نوع FIXED-LENGTH:
در این نوع رشته ها فضای مورد استفاده برابر با حداکثر طول تعیین شده خواهد بود. مانند نوع داده CHAR
مثال 1: در این دو رشته حداکثر طول برابر یک است.
red_flag CHAR(1) := ‘Y’;
red_flag CHAR := ‘Y’;
مثال 2: فضای حافظه رشته زیر معادل با 10 کاراکتر است.
TEST CHAR(10) := ‘HELLO’;
2.رشته های از نوع VARIABLE-LENGTH:
در این نوع رشته ها فضای مورد استفاده برابر با حداکثر طول رشته وارد شده خواهد بود. البته باید حداکثر طول داده را مشخص نمود. مانند نوع داده VARCHAR2.
تا قبل از اوراکل 19c، عملیات rotate برای logهای xmlی سرویس listener(فایل log.xml) به صورت خودکار انجام می شد و معمولا حجم هر کدام از این logfileها می توانست حدودا به ده مگابایت برسد البته این عملیات برای فایل listener.log اتفاق نمی افتاد و rotate آن به صورت سیستم عاملی و توسط DBA کنترل می شد.
در اوراکل 19c دو پارامتر(پارامترهای listener.ora) برای Rotate خودکار لاگهای listener اضافه شده است که در این متن با این دو پارامتر اشنا خواهیم شد.
در این فصل انواع LOOP یا حلقه در PL/SQL را بررسی می کنیم. ممکن است در یک برنامه نیاز باشد یک بلاک از کد چندین مرتبه اجرا شود در این مواقع از حلقه استفاده می شود.
در این متن به تغییرات و بهبودهای تابع LISTAGG در اوراکل 12cR2، 18c و 19c می پردازیم این تابع در نسخه 11gR2 ارائه شد.