Schemat funkcji. BODY dla plpgsql: declare deklaracje begin instrukcje end;

Podobne dokumenty
Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

BAZA DANYCH SIECI HOTELI

W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc.

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Zarządzanie danymi przestrzennymi. Analizy przestrzenne

Tabele wykorzystywane w przykładach

Zarządzanie danymi przestrzennymi. Rozwiązywanie problemów przestrzennych

Przestrzenne bazy danych. Analizy przestrzenne

SQL :: Data Definition Language

Systemowe aspekty baz

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Pakiety podprogramów Dynamiczny SQL

Język PL/SQL Procedury i funkcje składowane

Składowane procedury i funkcje

SQL 4 Structured Query Lenguage

Hurtownia Świętego Mikołaja projekt bazy danych

15. Funkcje i procedury składowane PL/SQL

1. Dodatkowe informacje. 2. Czynnoci wstpne. 3. Zadania

Język SQL, zajęcia nr 1

Systemowe aspekty baz danych

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Projekt-bazy danych Poczta

Bartosz Jachnik - Kino

Baza danych hotel Maciej Gerus

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Zaawansowane bazy danych i hurtownie danych semestr I

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Procedury i funkcje składowane

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

Ćwiczenia 2 IBM DB2 Data Studio

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Bazy danych. Dr inż. Paweł Kasprowski

Ref. 7 - Język SQL - polecenia DDL i DML

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Bazy danych. dr inż. Arkadiusz Mirakowski

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Politechnika Gdańska, międzywydziałowy kierunek INŻYNIERIA BIOMEDYCZNA. Instrukcja do laboratorium z przedmiotu: Bazy danych. Laboratorium nr 4.

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

EGZAMIN MATURALNY OD ROKU SZKOLNEGO

Zaawansowane funkcje SQL. Reguły, funkcje użytkownika w PostgreSQL, wyzwalacze

Projekt bazy danych. Schemat bazy danych. Opis bazy danych

Bloki anonimowe w PL/SQL

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Post-relacyjne bazy danych

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

PL/SQL. Zaawansowane tematy PL/SQL

Struktura bazy danych

Relacyjne bazy danych. Podstawy SQL

TABUN_CMS. System zarządzania treścią dla dedykowanej grupy użytkowników. Tabun_CMS 2008 Marcin Biegun, Szymon Bąk

PL/SQL. Zaawansowane tematy PL/SQL

PODSTAWY BAZ DANYCH 13. PL/SQL

Bazy danych programowanie Wykład dla studentów matematyk

ACESS- zadania z wykorzystaniem poleceń SQL

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

BAZY DANYCH Cz III. Transakcje, Triggery

Aspekty aktywne baz danych

Oracle PL/SQL. Paweł Rajba.

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Język PL/SQL Pakiety podprogramów

Monika Sychla Daniel Smolarek Projekt bazy danych

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

Oracle PL/SQL. Paweł Rajba.

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Część 1: OLAP. Raport z zajęć laboratoryjnych w ramach przedmiotu Hurtownie i eksploracja danych

Multimedialne bazy danych - laboratorium

Bazy danych Zaawansowane przetwarzanie danych

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Wykład 05 Bazy danych

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Programowanie w Ruby

Kursory. A. Pankowska 1

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Bazy danych 8. Procedury składowane i kursory. P. F. Góra

Wykład 8. SQL praca z tabelami 5

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Oracle PL/SQL. Paweł Rajba.

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Przydatne sztuczki - sql. Na przykładzie postgres a.

Relacyjne bazy danych. Podstawy SQL

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

PostgreSQL (

Transkrypt:

Funkcje PostgreSQL

Schemat funkcji CREATE OR REPLACE FUNCTION func_name( arg1 arg1_datatype) RETURNS some_type setof sometype TABLE (..) AS BODY of function LANGUAGE language_of_function BODY dla plpgsql: declare deklaracje begin instrukcje end;

Poziom zmienności funkcji VOLATILE - funkcja może wykonywać wszelkie modyfikacje na bazie danych. Jej zwracana wartość może się zmieniać w sposób dowolny STABLE - funkcja nie może modyfikować bazy danych, dla tych samych argumentów, oraz nie zmodyfikowanej odpytywanej tabeli zwraca te same wyniki. IMMUTABLE - funkcja nie może modyfikować bazy danych, dla tych samych argumentów, niezależnie od stanu bazy danych zwraca te same wyniki.

Funkcje SQL --Funkcja zwracająca tabelę CREATE FUNCTION blok_2.geom_info(param_name varchar) RETURNS TABLE (id_b int, typ_b varchar(50), description text) AS SELECT id_b, typ_b, st_astext(geom_b) FROM blok_2.budynki WHERE typ_b = $1; LANGUAGE 'sql' STABLE; --$1 pierwszy argument select * from blok_2.geom_info('budynek mieszkalny') --Funkcja zwracająca record CREATE FUNCTION blok_2.geom_info_rec(param_name varchar, OUT id_b int, OUT typ_b varchar, OUT description text) RETURNS SETOF record AS SELECT id_b, typ_b, st_astext(geom_b) FROM blok_2.budynki WHERE typ_b = $1; LANGUAGE 'sql' STABLE; select * from blok_2.geom_info_rec('budynek mieszkalny')

Funkcja plpgsql zwracająca obiekt CREATE OR REPLACE FUNCTION gis.hexagon( ) width integer, x double precision, y double precision RETURNS geometry AS $BODY$ DECLARE height float := width*2/sqrt(3); polygon_string varchar:='polygon((' x ' ' y ', ' x+width/2 ' ' y+height/4 ', ' x+width/2 ' ' y+height*3/4 ', ' x ' ' y+height ', ' x-width/2 ' ' y+height*3/4 ', ' x-width/2 ' ' y+height/4 ', ' x ' ' y BEGIN RETURN st_geomfromtext(polygon_string,2180); END; $BODY$ LANGUAGE plpgsql STABLE '))';

Funkcja zwracająca tablicę grid CREATE OR REPLACE FUNCTION gis.rect_grid( in gridres integer, in xmin float, in ymin float, in xmax float, in ymax float, in srid integer ) RETURNS TABLE(gid bigint, geom geometry) AS DECLARE xcount float :=ceil(abs(xmax-xmin)/gridres+1); ycount float :=ceil(abs(ymax-ymin)/gridres+1); BEGIN RETURN QUERY select row_number() OVER () as gid, ST_SetSRID(ST_MakeBox2d( ST_Point(xmin+(x-1)*gridres, ymin+(y-1)*gridres), ST_Point(xmin+x*gridres, ymin+y*gridres)),srid) as geom from generate_series(1,xcount::int) as x(x) cross join generate_series(1,ycount::int) as y(y); END; LANGUAGE 'plpgsql' STABLE; select * from gis.rect_grid(100,360664,491265,363854,493674,2180)

Funkcja zwracająca rekordy dla grid CREATE OR REPLACE FUNCTION blok_2.grid( in resolution integer, in geom_name varchar, in sche varchar, in tbl varchar, in srid integer, out grid_x integer, out grid_y integer, out geom geometry ) RETURNS SETOF record AS DECLARE rec record; sql text; BEGIN sql :=' with zasieg as --wyznaczenie zasięgu mapy na podstawie zasięgu warstwy (select ST_SetSRID(CAST(ST_Extent(' quote_ident(geom_name) ')as geometry),' srid ')as geom, ' resolution ' as gridres from ' quote_ident(sche) '.' quote_ident(tbl) ' ),'

--wyznaczenie rozmiaru grid 'grid_dim as (select ' --ilość oczek o wielkości resolution 'CAST((ST_XMax(geom)- ST_XMin(geom))as integer)/gridres+1 as xcount, CAST((ST_YMax(geom)- ST_YMin(geom))as integer)/gridres+1 as ycount,' --wyznaczenie współrzędnych zaięgu 'ST_XMin(geom)as xmin, ST_XMax(geom)as xmax, ST_YMin(geom)as ymin, ST_YMax(geom)as ymax from zasieg ),' --generowanie gridu 'grid as ( select x, y, ST_SetSRID(ST_MakeBox2d( ST_Point(xmin+(x-1)*gridres, ymin+(y-1)*gridres), ST_Point(xmin+x*gridres, ymin+y*gridres) ),2180) as grid_geom from (select generate_series(1,xcount)from grid_dim) as x(x) cross join (select generate_series(1,ycount)from grid_dim) as y(y) cross join grid_dim cross join zasieg )

select grid.x as x, grid.y as y, ST_Intersection(zasieg.geom, grid_geom)as geom from zasieg inner join grid on (ST_Intersects(zasieg.geom, grid_geom))'; for rec in execute sql LOOP grid_x := rec.x; grid_y := rec.y; geom := rec.geom; RETURN NEXT; END LOOP; RETURN; END; LANGUAGE 'plpgsql' STABLE;

Funkcja plpython: geokodowanie copy adresy(user_id,ulica,numer,kod,miejscowosc,data_wyg) from ' C:\adresy.csv' with delimiter as ';' CSV HEADER; --przy pomocy application stack bulidera dodać rozszerzenie pythona edb language pack w add-ons, tools and utilites --następnie wykonać create extension plpython3u; --dodać funkcję w wewnątrz pytona może być potrzebna biblioteka geopy CREATE OR REPLACE FUNCTION google_geocode( in addr text, out lon double precision,out lat double precision) RETURNS record AS from geopy.geocoders import GoogleV3 geoc = GoogleV3() address, (latitude, longitude) = geoc.geocode(addr) return (longitude, latitude) language 'plpython3u'; --wstawianie gemetrii na podstawie adresów - gotowe polecenie: update adresy set geom=(select geom from ( select id as idb, ST_Transform(ST_setsrid(ST_point((g).lon,(g).lat),4326),2180) as geom from (select id, google_geocode(concat_ws(' ',ulica,numer,kod,miejscowosc))as g from adresy )as foo)as b where id=idb)