مارا دنبال کنید : 

Grant/Revoke

توضیحات

می‌توان به یوزری برای انجام کارهای مختلف بر روی آبجکت grant یا revoke به معنی دسترسی یا منع دسترسی انجام کارهایی را داد.

دستور

با دستور زیر می‌توان grant برای انجام کاری را داد:

1
GRANT privileges ON object TO user;

با دستور زیر می‌توان revoke برای منع انجام کاری را داد:

1
REVOKE privileges ON object FROM user;

برای دستورات زیر می توان دستور grant/revoke صادر کرد:

SELECT, INSERT, UPDATE, DELETE, REFRENCES, ALTER, INDEX, ALL

 


مثال

در ادامه مثال‌هایی از grant/revoke را مشاهده می‌کنید:

1
2
3
4
5
6
7
8
9
10
11
GRANT SELECT, INSERT, UPDATE, DELETE ON suppliers TO smithj;
 
GRANT ALL ON suppliers TO smithj;
 
GRANT SELECT ON suppliers TO public;
 
REVOKE DELETE ON suppliers FROM anderson;
 
REVOKE ALL ON suppliers FROM anderson;
 
REVOKE ALL ON suppliers FROM public;

Roles

توضیحات

Role مجموعه‌ای از دسترسی‌ها است که می‌توان به یک یوزر یا role دیگر داد. با ایجاد role می‌توان برای گروهی از یوزرها مجوز دسترسی صادر کرد.

دستور

با دستور زیر می‌توان role تعریف کرد:

1
2
3
CREATE ROLE role_name
[ NOT IDENTIFIED |
IDENTIFIED {BY password | USING [schema.] | EXTERNALLY | GLOBALLY } ;

role_name: نامی که برای role می‌گذاریم.
NOT IDENTIFIED: به این معنی است که role فورا ایجاد می‌شود و به پسورد احتیاجی ندارد.
IDENTIFIED: به این معنی است که کاربر باید با یک متد مشخص احراز هویت شود.
EXTERNALLY: به این معنی است که برای فعال کردن role باید از یک سرویس خارجی استفاده کرد.
GLOBALLY: به این معنی است که برای فعال کردن role باید مستقیما از یک directory service سازمانی استفاده کرد.

با دستور زیر می‌توان به role مورد نظر grant/revoke داد:

1
GRANT privileges ON object TO role_name

مثال

مثالی از ایجاد role و دادن دسترسی به آن را مشاهده می‌کنید:

1
2
3
4
CREATE ROLE test_role
IDENTIFIED BY test123;
 
GRANT select, insert, update, delete ON suppliers TO test_role;

Indexes

توضیحات

Index روشی است برای افزایش کارایی و بازیابی سریع‌تر رکوردها. به صورت دیفالت از روش B-tree برای ایندکس گذاری استفاده می‌شود.

دستور

با دستور زیر می‌توان Index تعریف کرد.

1
2
3
CREATE [UNIQUE] INDEX index_name
  ON table_name (column1, column2, ... column_n)
  [ COMPUTE STATISTICS ];

UNIQUE: مشخص می‌کند که ترکیب مقادیر در ستون‌های index باید یکتا باشد.

index_name: نامی که به index می‌دهیم.

table_name: نام جدولی که برای آن index می‌سازیم.

column1, column2, … column_n: ستون‌هایی که در index استفاده می‌شود.

COMPUTE STATISTICS: این گزینه به اوراکل می‌گوید که در حین ایجاد index آمارهایی را جمع آوری کند.

اوراکل این امکان را فراهم می‌کند که ساخت index تنها بر روی ستون‌ها محدود نباشد. می‌توان بر روی توابع نیز index اعمال کرد.

1
2
3
CREATE [UNIQUE] INDEX index_name
  ON table_name (function1, function2, ... function_n)
  [ COMPUTE STATISTICS ];

function1, function2, … function_n: توابعی که در index استفاده می‌شود.

 


مثال

مثال‌هایی از ایجاد index:

1
2
3
4
5
6
7
8
9
10
11
12
CREATE INDEX supplier_idx
  ON supplier (supplier_name, city)
  COMPUTE STATISTICS;
 
CREATE INDEX supplier_idx
  ON supplier (UPPER(supplier_name));
 
 
SELECT supplier_id, supplier_name, UPPER(supplier_name)
FROM supplier
WHERE UPPER(supplier_name) IS NOT NULL
ORDER BY UPPER(supplier_name);

SQLCODE & SQLERRM Function

توضیحات

تابع SQLCODE عدد exception که اخیرا بیشتر اتفاق افتاده است را برمی‌گرداند و SQLERRM پیام exception که اخیرا بیشتر اتفاق افتاده است را برمی‌گرداند.

دستور

با اجرای دستورات زیر عدد و پیام exception پرتکرار بر می‌گردد:

1
2
SQLCODE;
SQLERRM

.


مثال

در مثال زیر کاربرد تابع SQLCODE را مشاهده می‌کنیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
EXCEPTION
   WHEN exception_name1 THEN
      [statements]
 
   WHEN exception_name2 THEN
      [statements]
 
   WHEN exception_name_n THEN
      [statements]
 
   WHEN OTHERS THEN
      [statements]
 
END [procedure_name];
 
 
EXCEPTION
   WHEN OTHERS THEN
      raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;
 
 
EXCEPTION
   WHEN OTHERS THEN
      err_code := SQLCODE;
      err_msg := SUBSTR(SQLERRM, 1, 200);
 
      INSERT INTO audit_table (error_number, error_message)
      VALUES (err_code, err_msg);

Procedure

دستور

با دستور زیر می‌توان procedure تعریف کرد.

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE [OR REPLACE] PROCEDURE procedure_name
    [ (parameter [,parameter]) ]
 
IS
    [declaration_section]
 
BEGIN
    executable_section
 
[EXCEPTION
    exception_section]
 
END [procedure_name];

In: متغیری که با In می‌آید read-only است و فقط می‌توان از خود مقدار آن درون پروسیجر استفاده کرد.
OUT: متغیری است که فقط write-only است و می‌توان در برنامه‌ای که از این پروسیجر استفاده شده از مقدار این متغیر استفاده کرد.
IN OUT: متغیری است که ویژگی‌های In و Out را هم‌زمان دارد.

 

 


مثال

مثال‌هایی از ایجاد index:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
CREATE OR REPLACE Procedure UpdateCourse
   ( name_in IN varchar2 )
 
IS
   cnumber number;
 
   cursor c1 is
   SELECT course_number
    FROM courses_tbl
    WHERE course_name = name_in;
 
BEGIN
 
   open c1;
   fetch c1 into cnumber;
 
   if c1%notfound then
      cnumber := 9999;
   end if;
 
   INSERT INTO student_courses
   ( course_name,
     course_number )
   VALUES
   ( name_in,
     cnumber );
 
   commit;
 
   close c1;
 
EXCEPTION
WHEN OTHERS THEN
   raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;

Sequence

توضیحات

Sequence در اوراکل یک آبجکت است که اعداد متوالی تولید می‌کند.

دستور

با دستور زیر می‌توان sequence تعریف کرد:

1
2
3
4
5
6
CREATE SEQUENCE sequence_name
  MINVALUE value
  MAXVALUE value
  START WITH value
  INCREMENT BY value
  CACHE value;

مثال

مثال‌هایی از ایجاد sequence:
در این مثال اعداد از 1 شروع می‌شوند و به هر کدام یک عدد اضافه می‌شود.

1
2
3
4
5
6
CREATE SEQUENCE supplier_seq
  MINVALUE 1
  MAXVALUE 999999999999999999999999999
  START WITH 1
  INCREMENT BY 1
  CACHE 20;

مثالی از کاربرد Sequence

1
2
3
4
INSERT INTO suppliers
(supplier_id, supplier_name)
VALUES
(supplier_seq.NEXTVAL, 'Kraft Foods');

Synonyms

توضیحات

Synonym یک نام جایگزین است برای انواع آبجکت‌های اوراکل مانند جدول، ویو، پروسیجر و غیره. Synonym اصولا زمانی ساخته می‌شود که به یک یوزری دسترسی داده می‌شود برای آبجکتی از اسکیمای دیگر.

دستور

با دستور زیر می‌توان synonym تعریف کرد.

1
2
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema .] synonym_name
  FOR [schema .] object_name [@ dblink];

OR REPLACE: گزینه‌ای است که این امکان را می‌دهد تا برای نام‌گذاری بعدی آبجکت نیاز به drop کردن این synonym نباشد.
PUBLIC: به این معنی است که synonym برای همه یوزرها قابل دسترس است.
Schema: اسکیمای مورد نظر را نشان می‌دهد.
object_name: نوع آبجکتی است که می‌توان برای آن synonym تعریف کرد.

 

 


مثال

مثال‌هایی از تعریف synonym:

1
2
3
4
5
CREATE PUBLIC SYNONYM suppliers
FOR app.suppliers;
 
CREATE OR REPLACE PUBLIC SYNONYM suppliers
FOR app.suppliers;

Declare a cursor

توضیحات

Cursor یک دستور select است که در قسمت declaration کد pl/sql قرار می‌گیرد .

دستور

با دستور زیر می‌توان یک cursor بدون پارامتر تعریف کرد:

1
2
3
CURSOR cursor_name
IS
  SELECT_statement;

با دستور زیر می‌توان یک cursor با پارامتر تعریف کرد:

1
2
3
CURSOR cursor_name (parameter_list)
IS
  SELECT_statement;

با دستور زیر می‌توان یک cursor تعریف کرد که مقداری را بازگرداند:

1
2
3
4
CURSOR cursor_name
RETURN field%ROWTYPE
IS
   SELECT_statement;

 


مثال

مثال‌هایی از تعریف cursor با پارامتر و بدون پارامتر:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CURSOR c1
IS
  SELECT course_number
  FROM courses_tbl
  WHERE course_name = name_in;
 
 
CURSOR c2 (subject_id_in IN varchar2)
IS
  SELECT course_number
  FROM courses_tbl
  WHERE subject_id = subject_id_in;
 
 
CURSOR c3
RETURN courses_tbl%ROWTYPE
IS
   SELECT *
   FROM courses_tbl
   WHERE subject = 'Mathematics';

Close a cursor

توضیحات

قدم آخر برای کار با cursor، بستن آن است.

دستور

دستور برای بستن cursor از دستور زیر استفاده می‌کنیم:

1
CLOSE cursor_name;

.


مثال

مثالی از کار با cursor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CREATE OR REPLACE Function FindCourse
   ( name_in IN varchar2 )
   RETURN number
IS
   cnumber number;
 
   CURSOR c1
   IS
     SELECT course_number
     FROM courses_tbl
     WHERE course_name = name_in;
 
BEGIN
 
   OPEN c1;
   FETCH c1 INTO cnumber;
 
   if c1%notfound then
      cnumber := 9999;
   end if;
 
   CLOSE c1;
 
RETURN cnumber;
 
END;

Open cursor

توضیحات
بعد از این‌که cursor را تعریف کردیم قدم بعدی باز کردن آن است.
دستور
با دستور زیر می‌توان یک cursor را باز کرد:
1
OPEN cursor_name;
.
مثال
مثالی از استفاده از cursor:
1
OPEN c1;