SlideShare a Scribd company logo
1 of 43
Download to read offline
Presented by Sanam Maharjan
1. Logical database object or Schema
object
2. Reusable block of code
What ?
01
1. For repeated execution
2. To bind the logic of query
3. To compute a values
When ?
02
Building applications
Where ?
03
Functions
Our Team Style
Conversion
Function
1. CAST ( expression AS
target_type );
2. column_name :: datatype
3. to_char()
4. to_number()
NVL
Function
1. COALESE (argument1,
argument2,…);
2. NULLIF(argument_1,argum
ent_2);
Character
Function
1. Lower()
2. Concat()
3. Upper()
4. Trim()
Aggregate
Function
1. Min()
2. Max()
3. Count()
4. Sum()
5. Avg()
Built in Stored Functions
create [or replace] function function_name
(param_list)
returns return_type
language plpgsql
as
$$
declare
-- variable declaration
begin
-- logic
end; $$
Basic Syntax
PL/pgSQL parameter modes
IN OUT INOUT
The default Explicitly specified Explicitly specified
Pass a value to function Return a value from a function Pass a value to a function and
return an updated value.
In parameters act like constants out parameters act like
uninitialized variables
inout parameters act like an
initialized variables
Cannot be assigned a value Must assign a value Should be assigned a value
create or replace function emp_name_by_id
(id int,
out e_name varchar)
language plpgsql
as $$
begin
select concat(first_name,' ',last_name)
::varchar
into e_name
from employees
where employee_id = id;
if not found then
raise 'Employee with id % not found',id;
end if;
end; $$
➢ Returned back as a part of the result.
➢ Very useful in functions that need to return
multiple values.
--Returning multiple values
create or replace function get_sal_stat(
out max_salary int,
out min_salaray int,
out avg_salary int)
language plpgsql
as $$
begin
select max(salary), min(salary), avg(salary)
into max_salary, min_salaray, avg_salary
from employees;
end; $$
OUT mode
INOUT mode
create or replace function swap(
inout x int,
inout y int
)
language plpgsql
as $$
begin
select x,y into y,x;
end; $$;
select * from swap(10,20);
➢ The inout mode is the combination in and out modes.
➢ It means that the caller can pass an argument to a
function.
➢ The function changes the argument and returns the
updated value.
Consider we have function:
create or replace function get_emp_count(
id_from int,
id_to int)
returns int
language plpgsql
As $$
declare
id_count integer;
begin
select count(*)
into id_count
from employees
where employee_id between
id_from and id_to;
return id_count;
end;$$
Calling a user-defined function
Then we can call function in 3 ways.
1. Using positional notation:
select get_emp_count(100,200);
2. Using named notation:
select get_emp_count(id_from=>100,
id_to=>200);
3. Using the mixed notation:
select get_emp_count(100, id_to=>200);
✓ We can see the cost of query with Explain Keyword provided by PSQL.
✓ Consider we have following query:
select e.employee_id,
e.first_name,
d.department_name,
l.city,
c.country_name,
r.region_name
from employees e
join departments d on e.department_id = d.department_id
join locations l on d.location_id = l.location_id
join countries c on c.country_id = l.country_id
join regions r on r.region_id = c.region_id
where e.employee_id = 200;
EXPLAIN
select e.employee_id,
e.first_name,
d.department_name,
l.city,
c.country_name,
r.region_name
from employees e
join departments d
on e.department_id = d.department_id
join locations l
on d.location_id = l.location_id
join countries c
on c.country_id = l.country_id
join regions r
on r.region_id = c.region_id
where e.employee_id = 200;
create or replace function hr_select(id int)
returns table (employee_id int, first_name varchar,
department_name varchar, city varchar,
country_name varchar,
region_name varchar)
language plpgsql
as $$
declare
emp_id int;
begin
emp_id = id;
return query
select e.employee_id, e.first_name, d.department_name,
l.city,c.country_name,r.region_name
from employees e
join departments d on e.department_id = d.department_id
join locations l on d.location_id = l.location_id
join countries c on c.country_id = l.country_id
join regions r on r.region_id = c.region_id
where e.employee_id = emp_id;
end; $$
explain
select * from hr_select(200);
➢ For creating our own custom aggregates
➢ To perform conditional counts
Step 1: Creating a Function
CREATE OR REPLACE FUNCTION countif_add(
current_count int,
expression bool)
RETURNS int
AS
$BODY$
SELECT CASE expression
WHEN true THEN
current_count + 1
ELSE
current_count
END;
$BODY$
LANGUAGE SQL IMMUTABLE;
Step 2: Creating a Aggregate
CREATE AGGREGATE count_if (boolean)
(
sfunc = countif_add,
stype = int,
initcond = 0
);
Step 3: Quering with aggregate
SELECT count_if(employee_id < 150)
FROM employees;
Function Stability
Categories
1. VOLATILE
2. STABLE
3. IMMUTABLE
Function Overloading
1. create or replace function add(a int, b int)
2. create or replace function add(a int, b int, c int)
select add(1,2);
select add(1,2,3);
Limitation of Function
❖ We cannot start a transaction, and commit or rollback
i.e we cannot execute transaction
CREATE OR REPLACE function control_transaction()
returns boolean
LANGUAGE plpgsql
AS $$
BEGIN
CREATE TABLE test1 (id int);
INSERT INTO test1 VALUES (1);
COMMIT;
CREATE TABLE test2 (id int);
INSERT INTO test2 VALUES (1);
ROLLBACK;
return true;
END $$;
select control_transaction();
Transaction in Function
Logical database object or Schema object
What ?
01
1. To execute transactions
2. To performs an action
When ?
02
Building applications
Where ?
03
Procedure
create [or replace] procedure procedure_name
(parameter_list)
language plpgsql
as $$
declare
-- variable declaration
begin
-- stored procedure body
end; $$
Basic Syntax
CREATE OR REPLACE PROCEDURE control_transaction()
LANGUAGE plpgsql
AS $$
BEGIN
CREATE TABLE test1 (id int);
INSERT INTO test1 VALUES (1);
COMMIT;
CREATE TABLE test2 (id int);
INSERT INTO test2 VALUES (1);
ROLLBACK;
END $$;
call control_transaction();
select relname from pg_class where relname like
'%test%';
Transaction in Procedure
101001101001000010101
0011110111011011011010
101000011100101011001
010100111010100010101
0001011010110110110100
010101110001010100010
1000101110101100010011
010011010010000101010
0111101110110110110101
010000111001010110010
101001110101000101010
0010110101101101101001
e n i f i t s
Function and Procedure
B
DATA
1. Improved performance
2. Easy maintenance
3. Improved data security and integrity
4. Improved code clarity
Procedure Vs Function
Execute as a PL/SQL statement
1.
Invoke as part of an expression
1.
Do not contain RETURN clause in
header
2.
3.
Can contain a RETURN statement
Must contain a RETURN clause in
header
2.
3.
Must contain at least one RETURN
statement
Named database object that is associated
with a table and gets activated when a
particular event occur
What ?
01
1. Audit maintain
2. Forcing check constraint
When ?
02
While doing any action in database
Where ?
03
Trigger
When Event Row-level Statement-level
BEFORE
INSERT/UPDATE/DELETE Tables Tables and views
TRUNCATE — Tables
AFTER
INSERT/UPDATE/DELETE Tables Tables and views
TRUNCATE — Tables
INSTEAD OF
INSERT/UPDATE/DELETE Views —
TRUNCATE — —
Types of triggers used on tables and views
States of row and table
OLD NEW
existing row, table before event new row, table after event
Step 1: Function Syntax to create trigger
CREATE FUNCTION trigger_function()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS $$
BEGIN
-- trigger logic
END;
$$
Step 2: Creating Trigger
CREATE TRIGGER trigger_name
{BEFORE | AFTER} { event }
ON table_name
[FOR [EACH] { ROW | STATEMENT }]
EXECUTE PROCEDURE trigger_function
Row level Vs Statement Level
QUARY:
insert into emp select 'Sanam',generate_series(1, 100000);
CREATE FUNCTION checkout_trig()
RETURNS trigger
LANGUAGE plpgsql as $$
BEGIN
IF new.age > 18 THEN
RAISE EXCEPTION 'Age should be less
than 18';
END IF;
RETURN new;
END;$$;
create trigger trg_chec
before insert or update on age_check
for each row
execute procedure checkout_trig();
insert into age_check values (1,20);
Adding check constraint using Trigger
Managing Trigger
1. Modifying TRIGGER
alter trigger trigger_name on table_name rename to new_trigger_name;
2. Diabling and enabling TRIGGER
alter table table_name disable trigger trigger_name | all;
alter table table_name enable trigger trigger_name | all;
3. Removing TRIGGER
drop trigger trigger_name on table_name;
1. Process of dividing large table into
multiple smaller parts
2. Physical Database Schema Object
What ?
01
1. For Tuning database
2. Optimization of database
Why ?
02
Bulk loads like QR code data
Where ?
03
Partition
Database Optimization Technique
Index Partition Materialized View View Table
Why Partition ???
P1
P3
P2
P4
Syntax:
CREATE TABLE main_table_name (
column_1 data type,
column_n data type,
)
PARTITION BY LIST (column_n) ;
--PARTITION BY RANGE (column_n);
--PARTITION BY HASH (column_n);
-- LIST
CREATE TABLE part_one PARTITION OF parent_table
FOR VALUES IN (‘A’);
-- Range
create table part_one partition of parent_table
FOR VALUES FROM (minvalue) to (2500000);
-- Hash
CREATE TABLE part_one PARTITION OF parent_table
FOR VALUES WITH (modulus 3, remainder 0);
Types of Partition
03
02
01 LIST Partition
RANGE Partition
HASH Partition
➢ LIST Partition
1. When to use List Partition
✓ Group Wise like (department wise, area
wise, gender wise)
2. Syntax:
CREATE TABLE main_table_name (
column_1 data type,
column_n data type,
)
PARTITION BY LIST (column_n);
CREATE TABLE part_one PARTITION OF parent_table
FOR VALUES IN (‘A’);
LIST Partition example
Creating partition table for gender wise:
create table partition_test (id int, name varchar, gender varchar)
partition by list(gender);
CREATE TABLE person_male PARTITION OF partition_test FOR VALUES IN ('Male');
CREATE TABLE person_female PARTITION OF partition_test FOR VALUES IN ('Female');
CREATE TABLE person_other PARTITION OF partition_test default;
insert into partition_test values(1,'Sanam','Male’), (2,'Kt','Female’),
(3,'thxaina','Others’);
SELECT tableoid::regclass,* FROM partition_test;
➢ RANGE Partition
1. When to use RANGE Partition
✓ Numerical
✓ Monthly or Quartey Range (Call history)
1. Syntax:
CREATE TABLE main_table_name (
column_1 data type,
column_n data type,
)
PARTITION BY RANGE (column_n);
create table part_one partition of parent_table
FOR VALUES FROM (minvalue) to (2500000);
RANGE Partition example
Creating partition table for range:
create table partition_test (id int, name varchar) partition by range(id);
create table p1 partition of partition_test for values from (minvalue) to (2500000);
create table p2 partition of partition_test for values from (2500000) to (5000000);
create table p3 partition of partition_test for values from (5000000) to (maxvalue);
insert into partition_test
select x,'sanam' from generate_series(1, 10000000) as x;
select * from partition_test;
SELECT tableoid::regclass,* FROM partition_test;
➢ HASH Partition
1. What is HASH Partition
✓ Created by using modulus and remainder for each
partition, where rows are inserted by generating a
hash value using these modulus and remainders
2. Syntax:
CREATE TABLE main_table_name (
column_1 data type,
column_n data type,
)
PARTITION BY HASH (column_n);
CREATE TABLE part_one PARTITION OF parent_table FOR VALUES
WITH (modulus 3, remainder 0);
HASH Partition example
Creating partition table Using HASH:
CREATE TABLE customers (id int, status TEXT, arr NUMERIC) PARTITION BY HASH(id);
CREATE TABLE cust_part1 PARTITION OF customers FOR VALUES WITH (modulus 3,
remainder 0);
CREATE TABLE cust_part2 PARTITION OF customers FOR VALUES WITH (modulus 3,
remainder 1);
CREATE TABLE cust_part3 PARTITION OF customers FOR VALUES WITH (modulus 3,
remainder 2);
INSERT INTO customers VALUES (1,'ACTIVE',100), (2,'RECURRING',20),
(3,'EXPIRED',38), (4,'REACTIVATED',144);
SELECT tableoid::regclass,* FROM customers;
Limitations of Partition
Doesn’t take primary key
in LIST and RANGE
02 Primary Key
PostgreSQL does not
create a system-defined
subpartition when not
given it explicitly, so if a
subpartition is present at
least one partition should
be present to hold values.
03 Subpartition
Partition does not support
BEFORE ROW triggers
on partitioned tables. If
necessary, they must be
defined on individual
partitions, not the
partitioned table.
04 Before Row Trigger
Range partition does not
allow NULL values
01 NULL
THANK YOU

More Related Content

Similar to Function Procedure Trigger Partition.pdf

DBA Commands and Concepts That Every Developer Should Know
DBA Commands and Concepts That Every Developer Should KnowDBA Commands and Concepts That Every Developer Should Know
DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
Oracle - Program with PL/SQL - Lession 17
Oracle - Program with PL/SQL - Lession 17Oracle - Program with PL/SQL - Lession 17
Oracle - Program with PL/SQL - Lession 17Thuan Nguyen
 
Getting Started with PL/Proxy
Getting Started with PL/ProxyGetting Started with PL/Proxy
Getting Started with PL/ProxyPeter Eisentraut
 
Programming in Oracle with PL/SQL
Programming in Oracle with PL/SQLProgramming in Oracle with PL/SQL
Programming in Oracle with PL/SQLlubna19
 
Procedures and triggers in SQL
Procedures and triggers in SQLProcedures and triggers in SQL
Procedures and triggers in SQLVikash Sharma
 
Mysqlppt
MysqlpptMysqlppt
MysqlpptReka
 
Procedure and Functions in pl/sql
Procedure and Functions in pl/sqlProcedure and Functions in pl/sql
Procedure and Functions in pl/sqlÑirmal Tatiwal
 
Tony jambu (obscure) tools of the trade for tuning oracle sq ls
Tony jambu   (obscure) tools of the trade for tuning oracle sq lsTony jambu   (obscure) tools of the trade for tuning oracle sq ls
Tony jambu (obscure) tools of the trade for tuning oracle sq lsInSync Conference
 
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowDBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowDBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowDBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
Oracle 11g new features for developers
Oracle 11g new features for developersOracle 11g new features for developers
Oracle 11g new features for developersScott Wesley
 

Similar to Function Procedure Trigger Partition.pdf (20)

Less09 Data
Less09 DataLess09 Data
Less09 Data
 
DBA Commands and Concepts That Every Developer Should Know
DBA Commands and Concepts That Every Developer Should KnowDBA Commands and Concepts That Every Developer Should Know
DBA Commands and Concepts That Every Developer Should Know
 
Oracle - Program with PL/SQL - Lession 17
Oracle - Program with PL/SQL - Lession 17Oracle - Program with PL/SQL - Lession 17
Oracle - Program with PL/SQL - Lession 17
 
Chapter 2
Chapter 2Chapter 2
Chapter 2
 
Oracle
OracleOracle
Oracle
 
Module04
Module04Module04
Module04
 
Getting Started with PL/Proxy
Getting Started with PL/ProxyGetting Started with PL/Proxy
Getting Started with PL/Proxy
 
Programming in Oracle with PL/SQL
Programming in Oracle with PL/SQLProgramming in Oracle with PL/SQL
Programming in Oracle with PL/SQL
 
Procedures and triggers in SQL
Procedures and triggers in SQLProcedures and triggers in SQL
Procedures and triggers in SQL
 
Mysqlppt
MysqlpptMysqlppt
Mysqlppt
 
Clean code
Clean codeClean code
Clean code
 
Procedure and Functions in pl/sql
Procedure and Functions in pl/sqlProcedure and Functions in pl/sql
Procedure and Functions in pl/sql
 
Tony jambu (obscure) tools of the trade for tuning oracle sq ls
Tony jambu   (obscure) tools of the trade for tuning oracle sq lsTony jambu   (obscure) tools of the trade for tuning oracle sq ls
Tony jambu (obscure) tools of the trade for tuning oracle sq ls
 
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowDBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
 
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowDBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
 
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowDBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
 
JPA 2.0
JPA 2.0JPA 2.0
JPA 2.0
 
Javascripting.pptx
Javascripting.pptxJavascripting.pptx
Javascripting.pptx
 
Oracle 11g new features for developers
Oracle 11g new features for developersOracle 11g new features for developers
Oracle 11g new features for developers
 
Unit 3
Unit 3Unit 3
Unit 3
 

Recently uploaded

科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理e4aez8ss
 
20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdfHuman37
 
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...limedy534
 
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改yuu sss
 
Amazon TQM (2) Amazon TQM (2)Amazon TQM (2).pptx
Amazon TQM (2) Amazon TQM (2)Amazon TQM (2).pptxAmazon TQM (2) Amazon TQM (2)Amazon TQM (2).pptx
Amazon TQM (2) Amazon TQM (2)Amazon TQM (2).pptxAbdelrhman abooda
 
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptdokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptSonatrach
 
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort servicejennyeacort
 
Generative AI for Social Good at Open Data Science East 2024
Generative AI for Social Good at Open Data Science East 2024Generative AI for Social Good at Open Data Science East 2024
Generative AI for Social Good at Open Data Science East 2024Colleen Farrelly
 
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)jennyeacort
 
Consent & Privacy Signals on Google *Pixels* - MeasureCamp Amsterdam 2024
Consent & Privacy Signals on Google *Pixels* - MeasureCamp Amsterdam 2024Consent & Privacy Signals on Google *Pixels* - MeasureCamp Amsterdam 2024
Consent & Privacy Signals on Google *Pixels* - MeasureCamp Amsterdam 2024thyngster
 
Beautiful Sapna Vip Call Girls Hauz Khas 9711199012 Call /Whatsapps
Beautiful Sapna Vip  Call Girls Hauz Khas 9711199012 Call /WhatsappsBeautiful Sapna Vip  Call Girls Hauz Khas 9711199012 Call /Whatsapps
Beautiful Sapna Vip Call Girls Hauz Khas 9711199012 Call /Whatsappssapnasaifi408
 
办理(UWIC毕业证书)英国卡迪夫城市大学毕业证成绩单原版一比一
办理(UWIC毕业证书)英国卡迪夫城市大学毕业证成绩单原版一比一办理(UWIC毕业证书)英国卡迪夫城市大学毕业证成绩单原版一比一
办理(UWIC毕业证书)英国卡迪夫城市大学毕业证成绩单原版一比一F La
 
INTERNSHIP ON PURBASHA COMPOSITE TEX LTD
INTERNSHIP ON PURBASHA COMPOSITE TEX LTDINTERNSHIP ON PURBASHA COMPOSITE TEX LTD
INTERNSHIP ON PURBASHA COMPOSITE TEX LTDRafezzaman
 
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一fhwihughh
 
Predicting Salary Using Data Science: A Comprehensive Analysis.pdf
Predicting Salary Using Data Science: A Comprehensive Analysis.pdfPredicting Salary Using Data Science: A Comprehensive Analysis.pdf
Predicting Salary Using Data Science: A Comprehensive Analysis.pdfBoston Institute of Analytics
 
B2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxB2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxStephen266013
 
PKS-TGC-1084-630 - Stage 1 Proposal.pptx
PKS-TGC-1084-630 - Stage 1 Proposal.pptxPKS-TGC-1084-630 - Stage 1 Proposal.pptx
PKS-TGC-1084-630 - Stage 1 Proposal.pptxPramod Kumar Srivastava
 
NLP Project PPT: Flipkart Product Reviews through NLP Data Science.pptx
NLP Project PPT: Flipkart Product Reviews through NLP Data Science.pptxNLP Project PPT: Flipkart Product Reviews through NLP Data Science.pptx
NLP Project PPT: Flipkart Product Reviews through NLP Data Science.pptxBoston Institute of Analytics
 
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝DelhiRS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhijennyeacort
 

Recently uploaded (20)

科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
 
20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf
 
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
 
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
 
Amazon TQM (2) Amazon TQM (2)Amazon TQM (2).pptx
Amazon TQM (2) Amazon TQM (2)Amazon TQM (2).pptxAmazon TQM (2) Amazon TQM (2)Amazon TQM (2).pptx
Amazon TQM (2) Amazon TQM (2)Amazon TQM (2).pptx
 
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptdokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
 
E-Commerce Order PredictionShraddha Kamble.pptx
E-Commerce Order PredictionShraddha Kamble.pptxE-Commerce Order PredictionShraddha Kamble.pptx
E-Commerce Order PredictionShraddha Kamble.pptx
 
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
 
Generative AI for Social Good at Open Data Science East 2024
Generative AI for Social Good at Open Data Science East 2024Generative AI for Social Good at Open Data Science East 2024
Generative AI for Social Good at Open Data Science East 2024
 
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
 
Consent & Privacy Signals on Google *Pixels* - MeasureCamp Amsterdam 2024
Consent & Privacy Signals on Google *Pixels* - MeasureCamp Amsterdam 2024Consent & Privacy Signals on Google *Pixels* - MeasureCamp Amsterdam 2024
Consent & Privacy Signals on Google *Pixels* - MeasureCamp Amsterdam 2024
 
Beautiful Sapna Vip Call Girls Hauz Khas 9711199012 Call /Whatsapps
Beautiful Sapna Vip  Call Girls Hauz Khas 9711199012 Call /WhatsappsBeautiful Sapna Vip  Call Girls Hauz Khas 9711199012 Call /Whatsapps
Beautiful Sapna Vip Call Girls Hauz Khas 9711199012 Call /Whatsapps
 
办理(UWIC毕业证书)英国卡迪夫城市大学毕业证成绩单原版一比一
办理(UWIC毕业证书)英国卡迪夫城市大学毕业证成绩单原版一比一办理(UWIC毕业证书)英国卡迪夫城市大学毕业证成绩单原版一比一
办理(UWIC毕业证书)英国卡迪夫城市大学毕业证成绩单原版一比一
 
INTERNSHIP ON PURBASHA COMPOSITE TEX LTD
INTERNSHIP ON PURBASHA COMPOSITE TEX LTDINTERNSHIP ON PURBASHA COMPOSITE TEX LTD
INTERNSHIP ON PURBASHA COMPOSITE TEX LTD
 
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
 
Predicting Salary Using Data Science: A Comprehensive Analysis.pdf
Predicting Salary Using Data Science: A Comprehensive Analysis.pdfPredicting Salary Using Data Science: A Comprehensive Analysis.pdf
Predicting Salary Using Data Science: A Comprehensive Analysis.pdf
 
B2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxB2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docx
 
PKS-TGC-1084-630 - Stage 1 Proposal.pptx
PKS-TGC-1084-630 - Stage 1 Proposal.pptxPKS-TGC-1084-630 - Stage 1 Proposal.pptx
PKS-TGC-1084-630 - Stage 1 Proposal.pptx
 
NLP Project PPT: Flipkart Product Reviews through NLP Data Science.pptx
NLP Project PPT: Flipkart Product Reviews through NLP Data Science.pptxNLP Project PPT: Flipkart Product Reviews through NLP Data Science.pptx
NLP Project PPT: Flipkart Product Reviews through NLP Data Science.pptx
 
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝DelhiRS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
 

Function Procedure Trigger Partition.pdf

  • 2. 1. Logical database object or Schema object 2. Reusable block of code What ? 01 1. For repeated execution 2. To bind the logic of query 3. To compute a values When ? 02 Building applications Where ? 03 Functions
  • 3. Our Team Style Conversion Function 1. CAST ( expression AS target_type ); 2. column_name :: datatype 3. to_char() 4. to_number() NVL Function 1. COALESE (argument1, argument2,…); 2. NULLIF(argument_1,argum ent_2); Character Function 1. Lower() 2. Concat() 3. Upper() 4. Trim() Aggregate Function 1. Min() 2. Max() 3. Count() 4. Sum() 5. Avg() Built in Stored Functions
  • 4. create [or replace] function function_name (param_list) returns return_type language plpgsql as $$ declare -- variable declaration begin -- logic end; $$ Basic Syntax
  • 5. PL/pgSQL parameter modes IN OUT INOUT The default Explicitly specified Explicitly specified Pass a value to function Return a value from a function Pass a value to a function and return an updated value. In parameters act like constants out parameters act like uninitialized variables inout parameters act like an initialized variables Cannot be assigned a value Must assign a value Should be assigned a value
  • 6.
  • 7. create or replace function emp_name_by_id (id int, out e_name varchar) language plpgsql as $$ begin select concat(first_name,' ',last_name) ::varchar into e_name from employees where employee_id = id; if not found then raise 'Employee with id % not found',id; end if; end; $$ ➢ Returned back as a part of the result. ➢ Very useful in functions that need to return multiple values. --Returning multiple values create or replace function get_sal_stat( out max_salary int, out min_salaray int, out avg_salary int) language plpgsql as $$ begin select max(salary), min(salary), avg(salary) into max_salary, min_salaray, avg_salary from employees; end; $$ OUT mode
  • 8. INOUT mode create or replace function swap( inout x int, inout y int ) language plpgsql as $$ begin select x,y into y,x; end; $$; select * from swap(10,20); ➢ The inout mode is the combination in and out modes. ➢ It means that the caller can pass an argument to a function. ➢ The function changes the argument and returns the updated value.
  • 9. Consider we have function: create or replace function get_emp_count( id_from int, id_to int) returns int language plpgsql As $$ declare id_count integer; begin select count(*) into id_count from employees where employee_id between id_from and id_to; return id_count; end;$$ Calling a user-defined function Then we can call function in 3 ways. 1. Using positional notation: select get_emp_count(100,200); 2. Using named notation: select get_emp_count(id_from=>100, id_to=>200); 3. Using the mixed notation: select get_emp_count(100, id_to=>200);
  • 10. ✓ We can see the cost of query with Explain Keyword provided by PSQL. ✓ Consider we have following query: select e.employee_id, e.first_name, d.department_name, l.city, c.country_name, r.region_name from employees e join departments d on e.department_id = d.department_id join locations l on d.location_id = l.location_id join countries c on c.country_id = l.country_id join regions r on r.region_id = c.region_id where e.employee_id = 200;
  • 11. EXPLAIN select e.employee_id, e.first_name, d.department_name, l.city, c.country_name, r.region_name from employees e join departments d on e.department_id = d.department_id join locations l on d.location_id = l.location_id join countries c on c.country_id = l.country_id join regions r on r.region_id = c.region_id where e.employee_id = 200;
  • 12. create or replace function hr_select(id int) returns table (employee_id int, first_name varchar, department_name varchar, city varchar, country_name varchar, region_name varchar) language plpgsql as $$ declare emp_id int; begin emp_id = id; return query select e.employee_id, e.first_name, d.department_name, l.city,c.country_name,r.region_name from employees e join departments d on e.department_id = d.department_id join locations l on d.location_id = l.location_id join countries c on c.country_id = l.country_id join regions r on r.region_id = c.region_id where e.employee_id = emp_id; end; $$ explain select * from hr_select(200);
  • 13. ➢ For creating our own custom aggregates ➢ To perform conditional counts
  • 14. Step 1: Creating a Function CREATE OR REPLACE FUNCTION countif_add( current_count int, expression bool) RETURNS int AS $BODY$ SELECT CASE expression WHEN true THEN current_count + 1 ELSE current_count END; $BODY$ LANGUAGE SQL IMMUTABLE; Step 2: Creating a Aggregate CREATE AGGREGATE count_if (boolean) ( sfunc = countif_add, stype = int, initcond = 0 ); Step 3: Quering with aggregate SELECT count_if(employee_id < 150) FROM employees;
  • 16. Function Overloading 1. create or replace function add(a int, b int) 2. create or replace function add(a int, b int, c int) select add(1,2); select add(1,2,3);
  • 17. Limitation of Function ❖ We cannot start a transaction, and commit or rollback i.e we cannot execute transaction
  • 18. CREATE OR REPLACE function control_transaction() returns boolean LANGUAGE plpgsql AS $$ BEGIN CREATE TABLE test1 (id int); INSERT INTO test1 VALUES (1); COMMIT; CREATE TABLE test2 (id int); INSERT INTO test2 VALUES (1); ROLLBACK; return true; END $$; select control_transaction(); Transaction in Function
  • 19. Logical database object or Schema object What ? 01 1. To execute transactions 2. To performs an action When ? 02 Building applications Where ? 03 Procedure
  • 20. create [or replace] procedure procedure_name (parameter_list) language plpgsql as $$ declare -- variable declaration begin -- stored procedure body end; $$ Basic Syntax
  • 21. CREATE OR REPLACE PROCEDURE control_transaction() LANGUAGE plpgsql AS $$ BEGIN CREATE TABLE test1 (id int); INSERT INTO test1 VALUES (1); COMMIT; CREATE TABLE test2 (id int); INSERT INTO test2 VALUES (1); ROLLBACK; END $$; call control_transaction(); select relname from pg_class where relname like '%test%'; Transaction in Procedure
  • 23. Procedure Vs Function Execute as a PL/SQL statement 1. Invoke as part of an expression 1. Do not contain RETURN clause in header 2. 3. Can contain a RETURN statement Must contain a RETURN clause in header 2. 3. Must contain at least one RETURN statement
  • 24. Named database object that is associated with a table and gets activated when a particular event occur What ? 01 1. Audit maintain 2. Forcing check constraint When ? 02 While doing any action in database Where ? 03 Trigger
  • 25. When Event Row-level Statement-level BEFORE INSERT/UPDATE/DELETE Tables Tables and views TRUNCATE — Tables AFTER INSERT/UPDATE/DELETE Tables Tables and views TRUNCATE — Tables INSTEAD OF INSERT/UPDATE/DELETE Views — TRUNCATE — — Types of triggers used on tables and views
  • 26. States of row and table OLD NEW existing row, table before event new row, table after event
  • 27. Step 1: Function Syntax to create trigger CREATE FUNCTION trigger_function() RETURNS TRIGGER LANGUAGE PLPGSQL AS $$ BEGIN -- trigger logic END; $$ Step 2: Creating Trigger CREATE TRIGGER trigger_name {BEFORE | AFTER} { event } ON table_name [FOR [EACH] { ROW | STATEMENT }] EXECUTE PROCEDURE trigger_function
  • 28. Row level Vs Statement Level QUARY: insert into emp select 'Sanam',generate_series(1, 100000);
  • 29. CREATE FUNCTION checkout_trig() RETURNS trigger LANGUAGE plpgsql as $$ BEGIN IF new.age > 18 THEN RAISE EXCEPTION 'Age should be less than 18'; END IF; RETURN new; END;$$; create trigger trg_chec before insert or update on age_check for each row execute procedure checkout_trig(); insert into age_check values (1,20); Adding check constraint using Trigger
  • 30. Managing Trigger 1. Modifying TRIGGER alter trigger trigger_name on table_name rename to new_trigger_name; 2. Diabling and enabling TRIGGER alter table table_name disable trigger trigger_name | all; alter table table_name enable trigger trigger_name | all; 3. Removing TRIGGER drop trigger trigger_name on table_name;
  • 31. 1. Process of dividing large table into multiple smaller parts 2. Physical Database Schema Object What ? 01 1. For Tuning database 2. Optimization of database Why ? 02 Bulk loads like QR code data Where ? 03 Partition
  • 32. Database Optimization Technique Index Partition Materialized View View Table
  • 34. Syntax: CREATE TABLE main_table_name ( column_1 data type, column_n data type, ) PARTITION BY LIST (column_n) ; --PARTITION BY RANGE (column_n); --PARTITION BY HASH (column_n); -- LIST CREATE TABLE part_one PARTITION OF parent_table FOR VALUES IN (‘A’); -- Range create table part_one partition of parent_table FOR VALUES FROM (minvalue) to (2500000); -- Hash CREATE TABLE part_one PARTITION OF parent_table FOR VALUES WITH (modulus 3, remainder 0);
  • 35. Types of Partition 03 02 01 LIST Partition RANGE Partition HASH Partition
  • 36. ➢ LIST Partition 1. When to use List Partition ✓ Group Wise like (department wise, area wise, gender wise) 2. Syntax: CREATE TABLE main_table_name ( column_1 data type, column_n data type, ) PARTITION BY LIST (column_n); CREATE TABLE part_one PARTITION OF parent_table FOR VALUES IN (‘A’);
  • 37. LIST Partition example Creating partition table for gender wise: create table partition_test (id int, name varchar, gender varchar) partition by list(gender); CREATE TABLE person_male PARTITION OF partition_test FOR VALUES IN ('Male'); CREATE TABLE person_female PARTITION OF partition_test FOR VALUES IN ('Female'); CREATE TABLE person_other PARTITION OF partition_test default; insert into partition_test values(1,'Sanam','Male’), (2,'Kt','Female’), (3,'thxaina','Others’); SELECT tableoid::regclass,* FROM partition_test;
  • 38. ➢ RANGE Partition 1. When to use RANGE Partition ✓ Numerical ✓ Monthly or Quartey Range (Call history) 1. Syntax: CREATE TABLE main_table_name ( column_1 data type, column_n data type, ) PARTITION BY RANGE (column_n); create table part_one partition of parent_table FOR VALUES FROM (minvalue) to (2500000);
  • 39. RANGE Partition example Creating partition table for range: create table partition_test (id int, name varchar) partition by range(id); create table p1 partition of partition_test for values from (minvalue) to (2500000); create table p2 partition of partition_test for values from (2500000) to (5000000); create table p3 partition of partition_test for values from (5000000) to (maxvalue); insert into partition_test select x,'sanam' from generate_series(1, 10000000) as x; select * from partition_test; SELECT tableoid::regclass,* FROM partition_test;
  • 40. ➢ HASH Partition 1. What is HASH Partition ✓ Created by using modulus and remainder for each partition, where rows are inserted by generating a hash value using these modulus and remainders 2. Syntax: CREATE TABLE main_table_name ( column_1 data type, column_n data type, ) PARTITION BY HASH (column_n); CREATE TABLE part_one PARTITION OF parent_table FOR VALUES WITH (modulus 3, remainder 0);
  • 41. HASH Partition example Creating partition table Using HASH: CREATE TABLE customers (id int, status TEXT, arr NUMERIC) PARTITION BY HASH(id); CREATE TABLE cust_part1 PARTITION OF customers FOR VALUES WITH (modulus 3, remainder 0); CREATE TABLE cust_part2 PARTITION OF customers FOR VALUES WITH (modulus 3, remainder 1); CREATE TABLE cust_part3 PARTITION OF customers FOR VALUES WITH (modulus 3, remainder 2); INSERT INTO customers VALUES (1,'ACTIVE',100), (2,'RECURRING',20), (3,'EXPIRED',38), (4,'REACTIVATED',144); SELECT tableoid::regclass,* FROM customers;
  • 42. Limitations of Partition Doesn’t take primary key in LIST and RANGE 02 Primary Key PostgreSQL does not create a system-defined subpartition when not given it explicitly, so if a subpartition is present at least one partition should be present to hold values. 03 Subpartition Partition does not support BEFORE ROW triggers on partitioned tables. If necessary, they must be defined on individual partitions, not the partitioned table. 04 Before Row Trigger Range partition does not allow NULL values 01 NULL