-
Notifications
You must be signed in to change notification settings - Fork 56
/
Day-44_ORACLE_PLSQL_NAMED_BLOCKS.txt
423 lines (325 loc) · 13 KB
/
Day-44_ORACLE_PLSQL_NAMED_BLOCKS.txt
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
"Welcome To Ashok IT"
"Oracle Database"
Topic : Introduction To PL/SQL- Named Blocks
Date : 21/01/2023
(Session - 44)
_____________________________________________________________________________________________________________________________
Important Information
*********************
>> Oracle Class Notes ::: https://github.com/ashokitschool/ORACLE_CLASS_NOTES
>> Class Recording ::: Will be available through Ashok IT Portal
>> Class Related Updates "Join In WhatsApp Group" check with Admin Team.
>> Tomorrow We have session at 11AM....
>> For MySQL Related Stored procedure & Functions refer following article i.e., https://www.mysqltutorial.org/
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Yesterday Session
=================
* We worked with Plsql cursors and cursors attributes.
* We Explored how to handle the exceptions in plsql block
1) Declaring the exception variable in declaration section
2) Raising the exception based on business logic
3) Handling exception using exception section in plsql block.
* In PlSql we have two kinds of blocks
1) Nameless Blocks :::: Not Reusable blocks and even it is not saved in database software.
2) Named Blocks :::: Reusable blocks and will occupied some space in database software.(stored Procedures & Functions)
Today Session : Named Blocks
=============================
* So far we executed some PLSQL blocks i.e.,Nameless blocks which are not reusable for multiple programs and even not yet stored in database software as well.
* If wanted to create some named plsql block which can be stored permanently in database software for this we need to go for
"Stored Procedures & Stored Functions" in plsql.
* Procedures and Functions are the subprograms which can be created and saved in the database as database objects.They can be called or referred inside the other blocks also.
Features
========
1) StoredProcedures are saved in database as pre-compiled objects.
2) Stored Procedures are executed explictly by using "execute/exec" command
Ex : execute/exec <procedure_name>([parameters])
3) Stored Procedures can be executed by calling implictly.
Ex: procedure_name([parameters]);
4) Stored Procedures may (or) maynot accepts the parameters.
5) By default Stored proceduce should not return any value to the calling program.
6) Stored Procedure can't be executed through select sql statement.
7) Stored Procedures may called from other procedures or functions
Syntax
======
CREATE [OR REPLACE] PROCEDURE <procedure_name> ([Parameters])
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END [<procedure_name>];
* CREATE PROCEDURE instructs the compiler to create new procedure in Oracle. Keyword ‘OR REPLACE’ instructs the compile to replace the existing procedure (if any) with the current one.
* Procedure name should be unique.
* Keyword ‘IS’ will be used, when the stored procedure in Oracle is nested into some other blocks. If the procedure is standalone then ‘AS’ will be used. Other than this coding standard, both have the same meaning.
Types of Parameters in Named Blocks
==================================
1) IN
=====
* An IN parameter is read-only. You can reference an IN parameter inside a procedure, but you cannot change its value.
* Oracle uses IN as the default mode.
* It means that if you don’t specify the mode for a parameter explicitly, Oracle will use the IN mode.
2) OUT
======
* An OUT parameter is writable. Typically, you set a returned value for the OUT parameter and return it to the calling program.
* Note that a procedure ignores the value that you supply for an OUT parameter.
3)INOUT
=======
* An INOUT parameter is both readable and writable. The procedure can read and modify it.
Example on Stored Procedure-1
==============================
CREATE OR REPLACE PROCEDURE welcome_msg
IS
BEGIN
dbms_output.put_line ('Welcome To Ashok IT For PL/SQL Stored Procedure Programming......');
END;
/
OUTPUT
======
Procedure created.
Execution
=========
SQL> execute welcome_msg
Welcome To Ashok IT For PL/SQL Stored Procedure Programming......
PL/SQL procedure successfully completed.
SQL> exec welcome_msg
Welcome To Ashok IT For PL/SQL Stored Procedure Programming......
PL/SQL procedure successfully completed.
Example on Stored Procedure-2
==============================
CREATE OR REPLACE PROCEDURE welcome_msg_with_name(name in varchar2)
IS
BEGIN
dbms_output.put_line ('Hello User ' || name || ' Welcome To Ashok IT For PLSQL Programming....');
END;
/
OUTPUT
======
Procedure created.
Execution
=========
SQL> execute welcome_msg_with_name
Hello User Mahesh Welcome To Ashok IT For PLSQL programming.......
PL/SQL procedure successfully completed.
SQL> exec welcome_msg_with_name
Hello User Mahesh Welcome To Ashok IT For PLSQL programming.......
PL/SQL procedure successfully completed.
Example on Stored Procedure-3
==============================
CREATE OR REPLACE PROCEDURE addition_two_numbers(a in number,b in number,c out number)
IS
BEGIN
c := a + b;
dbms_output.put_line ('Addition Of Two Numbers is::::' || c);
END;
/
Execution
=========
SQL> variable sumOfNumbers number
SQL> execute addition_two_numbers(250,250,:sumOfNumbers);
Addition Of Two Numbers is::::500
PL/SQL procedure successfully completed.
SQL> print sumOfNumbers
SUMOFNUMBERS
------------
500
Example on Stored Procedure-4
==============================
CREATE OR REPLACE PROCEDURE Get_Emp_Details_By_Id(employeeNumber in emp.empno%type)
IS
emp_record emp%rowtype;
BEGIN
select * into emp_record from emp where empno = employeeNumber;
dbms_output.put_line(emp_record.empno || '----'|| emp_record.ename || '---'|| emp_record.job|| '---'|| emp_record.sal);
exception
when no_data_found then
dbms_output.put_line('Given Employee is not existed in database table');
END;
/
Output
======
Procedure Created
Execution
=========
SQL> exec Get_Emp_Details_By_Id(7839);
7839----KING---PRESIDENT---9500
PL/SQL procedure successfully completed.
SQL> exec Get_Emp_Details_By_Id(123456);
Given Employee is not existed in database table
PL/SQL procedure successfully completed.
Example on Stored Procedure-5
=============================
CREATE OR REPLACE PROCEDURE update_employee_salary(employeeNumber in number,amount in number,salary out number)
IS
BEGIN
update emp set sal = sal + amount where empno = employeeNumber;
commit;
select sal into salary from emp where empno = employeeNumber;
END;
/
OUTPUT
======
Procedure Created
Execution
=========
SQL> variable latestSalary number;
SQL> execute update_employee_salary(7839,500,:latestSalary);
PL/SQL procedure successfully completed.
SQL> print latestSalary
LATESTSALARY
------------
10000
Example on Stored Procedure-6
=============================
create or replace procedure Get_Employees_By_Deptno(departmentno number,emp_details out SYS_REFCURSOR) as
begin
open emp_details for select * from emp where deptno = departmentno;
end;
/
OUTPUT
======
Procedure Created
Execution
=========
SQL> variable employeeDetails refcursor;
SQL> execute Get_Employees_By_Deptno(10,:employeeDetails);
PL/SQL procedure successfully completed.
SQL> print employeeDetails
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7839 KING PRESIDENT 17-NOV-81 10000 10
7782 CLARK MANAGER 7839 09-JUN-81 5950 10
7934 MILLER CLERK 7782 23-JAN-82 4800 10
Example on Stored Procedure-7
=============================
create or replace procedure Get_All_Employees(emp_details out SYS_REFCURSOR) as
begin
open emp_details for select * from emp;
end;
/
SQL> variable all_employees refcursor
SQL> execute Get_All_Employees(:all_employees);
PL/SQL procedure successfully completed.
SQL> print all_employees;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7839 KING PRESIDENT 17-NOV-81 10000 10
7698 BLAKE MANAGER 7839 01-MAY-81 5850 30
7782 CLARK MANAGER 7839 09-JUN-81 5950 10
7566 JONES MANAGER 7839 02-APR-81 5975 20
7788 SCOTT ANALYST 7566 09-DEC-82 6000 20
7902 FORD ANALYST 7566 03-DEC-81 6000 20
7369 SMITH CLERK 7902 17-DEC-80 3800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 4600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 4250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 4250 1400 30
7844 TURNER SALESMAN 7698 08-SEP-81 4500 0 30
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7876 ADAMS CLERK 7788 12-JAN-83 4100 20
7900 JAMES CLERK 7698 03-DEC-81 3950 30
Executing the Stored Procedure through PlSQL Block
==================================================
SQL> declare
2 employeeNo number := &employeeNo;
3 begin
4 Get_Emp_Details_By_Id(employeeNo);
5 end;
6 /
Enter value for employeeno: 7839
old 2: employeeNo number := &employeeNo;
new 2: employeeNo number := 7839;
7839----KING---PRESIDENT---10000
PL/SQL procedure successfully completed.
Executing the stored Procedure through plsql block
==================================================
declare
a number := &a;
b number := &b;
c number;
begin
addition_two_numbers(a,b,c);
dbms_output.put_line('Addition From Plsql block ' || c);
end;
/
Enter value for a: 10
old 2: a number := &a;
new 2: a number := 10;
Enter value for b: 20
old 3: b number := &b;
new 3: b number := 20;
Addition Of Two Numbers is::::30
Addition From Plsql block 30
PL/SQL procedure successfully completed.
Stored Functions
================
* Similar to a procedure, a PL/SQL function is a reusable program unit stored as a schema object in the Oracle Database.
Syntax
======
CREATE [OR REPLACE] FUNCTION function_name (parameter_list) RETURN return_type
IS
[declarative section]
BEGIN
[executable section]
[EXCEPTION]
[exception-handling section]
END;
Example on Stored Function-1
=============================
CREATE OR REPLACE FUNCTION Welcome_Message(p_name IN VARCHAR2) RETURN VARCHAR2
IS
BEGIN
RETURN (' Welcome To Ashok IT '|| p_name);
END;
/
Executing the Stored Function through plsql block
=================================================
DECLARE
welcome_message VARCHAR2(250);
BEGIN
welcome_message := Welcome_Message('Mahesh');
dbms_output.put_line(welcome_message);
END;
Executing the Stored Function throuhg SQL Select Statement
==========================================================
SELECT Welcome_Message('Mahesh') FROM DUAL;
Example on Stored Function-2
=============================
create or replace function adder(n1 in number, n2 in number) return number
is
n3 number(8);
begin
n3 :=n1+n2;
return n3;
end;
/
Example on Stored Function-3
============================
CREATE OR REPLACE FUNCTION totalEmployees RETURN number
IS
total number(2) := 0;
BEGIN
SELECT count(*) into total FROM emp;
RETURN total;
END;
/
Output
======
TOTALEMPLOYEES
--------------
14
Stored Procedure (Vs) Stored Function
=====================================
Stored Procedure
================
1) Used mainly to a execute certain process
2) Cannot call in SELECT statement
3) Use OUT parameter to return the value
4) It is not mandatory to return the value
Stored Function
===============
1) Used mainly to perform some calculation
2) A Function that contains no DML statements can be called in SELECT statement
3) Use RETURN to return the value
4) It is mandatory to return the value
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++