PostgreSQL/Postgre SQL/For

Материал из SQL эксперт
Версия от 13:13, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Nested for loop

   <source lang="sql">

postgres=# CREATE TABLE "books" ( postgres(# "id" integer NOT NULL, postgres(# "title" text NOT NULL, postgres(# "author_id" integer, postgres(# "subject_id" integer, postgres(# Constraint "books_id_pkey" Primary Key ("id") postgres(# ); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "books_id_pkey" for table "books" CREATE TABLE postgres=# postgres=# postgres=# insert into books values (7808, "Java", 4156, 9); INSERT 0 1 postgres=# insert into books values (4513, "Javascript", 1866, 15); INSERT 0 1 postgres=# insert into books values (4267, "C#", 2001, 15); INSERT 0 1 postgres=# insert into books values (1608, "Oracle", 1809, 2); INSERT 0 1 postgres=# insert into books values (1590, "Sql Server", 1809, 2); INSERT 0 1 postgres=# insert into books values (25908, "Postgre SQL", 15990, 2); INSERT 0 1 postgres=# insert into books values (1501, "Python", 2031, 2); INSERT 0 1 postgres=# insert into books values (190, "Java by API", 16, 6); INSERT 0 1 postgres=# insert into books values (1234, "2D", 25041, 3); INSERT 0 1 postgres=# insert into books values (2038, "C", 1644, 0); INSERT 0 1 postgres=# insert into books values (156, "C++", 115, 9); INSERT 0 1 postgres=# insert into books values (41473, "Programming Python", 7805, 4); INSERT 0 1 postgres=# insert into books values (41477, "Learning Python", 7805, 4); INSERT 0 1 postgres=# insert into books values (41478, "Perl Cookbook", 7806, 4); INSERT 0 1 postgres=# insert into books values (41472, "Practical PostgreSQL", 1212, 4); INSERT 0 1 postgres=# postgres=# select * from books;

 id   |        title         | author_id | subject_id

+----------------------+-----------+------------
 7808 | Java                 |      4156 |          9
 4513 | Javascript           |      1866 |         15
 4267 | C#                   |      2001 |         15
 1608 | Oracle               |      1809 |          2
 1590 | Sql Server           |      1809 |          2
25908 | Postgre SQL          |     15990 |          2
 1501 | Python               |      2031 |          2
  190 | Java by API          |        16 |          6
 1234 | 2D                   |     25041 |          3
 2038 | C                    |      1644 |          0
  156 | C++                  |       115 |          9
41473 | Programming Python   |      7805 |          4
41477 | Learning Python      |      7805 |          4
41478 | Perl Cookbook        |      7806 |          4
41472 | Practical PostgreSQL |      1212 |          4

(15 rows) postgres=# postgres=# postgres=# CREATE TABLE "subjects" ( postgres(# "id" integer NOT NULL, postgres(# "subject" text, postgres(# "location" text, postgres(# Constraint "subjects_pkey" Primary Key ("id") postgres(# ); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "subjects_pkey" for table "subjects" CREATE TABLE postgres=# postgres=# insert into subjects values (0, "Arts", "Creativity St"); INSERT 0 1 postgres=# insert into subjects values (1, "Business", "Productivity Ave"); INSERT 0 1 postgres=# insert into subjects values (2, "Children", "Books Kids Ct"); INSERT 0 1 postgres=# insert into subjects values (3, "Classics", "Academic Rd"); INSERT 0 1 postgres=# insert into subjects values (4, "Computers", "Productivity Ave"); INSERT 0 1 postgres=# insert into subjects values (5, "Cooking", "Creativity St"); INSERT 0 1 postgres=# insert into subjects values (6, "Drama", "Main St"); INSERT 0 1 postgres=# insert into subjects values (7, "Entertainment", "Main St"); INSERT 0 1 postgres=# insert into subjects values (8, "History", "Academic Rd"); INSERT 0 1 postgres=# insert into subjects values (9, "Horror", "Black Raven Dr"); INSERT 0 1 postgres=# insert into subjects values (10, "Mystery", "Black Raven Dr"); INSERT 0 1 postgres=# insert into subjects values (11, "Poetry", "Sunset Dr"); INSERT 0 1 postgres=# insert into subjects values (12, "Religion", "Regina"); INSERT 0 1 postgres=# insert into subjects values (13, "Romance", "Main St"); INSERT 0 1 postgres=# insert into subjects values (14, "Science", "Productivity Ave"); INSERT 0 1 postgres=# insert into subjects values (15, "Science Fiction", "Main St"); INSERT 0 1 postgres=# postgres=# select * from subjects;

id |     subject     |     location

+-----------------+------------------
 0 | Arts            | Creativity St
 1 | Business        | Productivity Ave
 2 | Children        | Books   Kids Ct
 3 | Classics        | Academic Rd
 4 | Computers       | Productivity Ave
 5 | Cooking         | Creativity St
 6 | Drama           | Main St
 7 | Entertainment   | Main St
 8 | History         | Academic Rd
 9 | Horror          | Black Raven Dr
10 | Mystery         | Black Raven Dr
11 | Poetry          | Sunset Dr
12 | Religion        | Regina
13 | Romance         | Main St
14 | Science         | Productivity Ave
15 | Science Fiction | Main St

(16 rows) postgres=# postgres=# postgres=# postgres=# drop function extract_all_titles2(); DROP FUNCTION postgres=# postgres=# CREATE FUNCTION "extract_all_titles2" () RETURNS text AS " postgres"# DECLARE postgres"# sub_id INTEGER; postgres"# text_output TEXT = "" ""; postgres"# sub_title TEXT; postgres"# row_data books%ROWTYPE; postgres"# BEGIN postgres"# FOR i IN 0..15 LOOP postgres"# SELECT INTO sub_title subject FROM subjects WHERE id = i; postgres"# text_output = text_output || """" || sub_title || "":""; postgres"# postgres"# FOR row_data IN SELECT * FROM books postgres"# WHERE subject_id = i LOOP postgres"# postgres"# text_output := text_output || row_data.title || """"; postgres"# postgres"# END LOOP; postgres"# END LOOP; postgres"# RETURN text_output; postgres"# END; postgres"# " LANGUAGE "plpgsql"; CREATE FUNCTION postgres=# postgres=# select extract_all_titles2();

                                                                                                                               extract_all_titles2

 Arts:CBusiness:Children:OracleSql ServerPostgre SQLPythonClassics:2DComputers:Programming PythonLearning PythonPerl CookbookPractical PostgreSQLCooking:Drama:Java by APIEntertainment:History:Horror:JavaC++Mystery:Poetry:Religion:Romance:Science:Science Fiction:JavascriptC#

(1 row) postgres=# postgres=# postgres=# drop table books; DROP TABLE postgres=# drop table subjects; DROP TABLE postgres=#

      </source>