1

Temat: kilka pytań nt. funkcji sql ??

Witam!

I. funkcje w języku SQL:
1) Chciałem zapytać czy za pomocą zwykłej funkcji w języku 'sql' możeliwe jest wykonanie działania na danych z tabel inne niż SELECT??
    1.1) Czy za pomocą funkcji można dodawać dane INSERT INTO??
    1.2) Czy też wykonywać całą procedurę??

//Pytam funkcję w język SQL,choć wiem że zapewne w PL/pgSQL jest to możliwe.

2) Czy można wyłączyć obsługę innych zapytań niż tylko zadeklarowane funkcję??

II.  Proceduralne dodawania danych:
3) Czy można nie deklarując funkcji ani procedury  w jednym zapytaniu dokonać INSERT'a częściowo w oparciu o SELECT?? Chodzi np. o sytuację że chcąc dodać nowy rekord do tabeli muszę znać nr rekordu poprzedniego (serial nie wchodzi tu w grę, gdyż chodzi o kilka tabel).

2

Odp: kilka pytań nt. funkcji sql ??

1.1. Można, ale 'INSERT INTO' to nie sql.
1.2 Nie rozumiem co masz na mysli
2. ?! znaczy zabronić iNSERTÓT, DELETÓW itp. ?
3. o to chodzi?

insert into tabela select ...

może podaj jakiś przykład

3

Odp: kilka pytań nt. funkcji sql ??

4

Odp: kilka pytań nt. funkcji sql ??

1.1
smile
Chyba niewyspany byłem takie głupoty napisałem smile. Oczywiście mozna uzyć INSERT INTO (sie mi pomyliło z SELECT INTO)

Będzie prościej jak pokażesz kod funkcji.

2. No to musisz utworzyc te funkcje z klauzula 'SECURITY DEFINER' i potem zabrać poleceniem REVOKE, prawa do zapytań SQL na konkretnych tabelach.

Ostatnio edytowany przez rski (2009-09-28 09:42:28)

5

Odp: kilka pytań nt. funkcji sql ??

6

Odp: kilka pytań nt. funkcji sql ??

Jaką masz wersję postgresa?

7

Odp: kilka pytań nt. funkcji sql ??

"PostgreSQL 8.3.7 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real (Ubuntu 4.3.3-5ubuntu4) 4.3.3"

8

Odp: kilka pytań nt. funkcji sql ??

Naprościej tak

create or replace function dodaj_ankiete(integer,varchar,text) returns integer
as
$$
insert into ankieta values(default,$1,$2,$3,clock_timestamp()) returning id;
$$
language 'sql';

9

Odp: kilka pytań nt. funkcji sql ??

A jeśli mogę zapytać jak za pomocą funcki pobierać dane w zapytaniu SELECT??



Nie chodzi mi o samą treść zapytania (SELECT ... FROM...), a o to jaki  ma być zwracany typ funkcji, i jak krotki później pobierać??

Ostatnio edytowany przez dfs (2009-10-06 00:05:46)

10

Odp: kilka pytań nt. funkcji sql ??

co?
Typ zwracanej funkcji sam musisz ustalić, albo bedzie to pojedyncza wartosc, albo 'setof...'.
Co znaczy 'jak krotki potem pobierać'?

11

Odp: kilka pytań nt. funkcji sql ??

12

Odp: kilka pytań nt. funkcji sql ??

Ad 1.
Zdefiniuj sobie odpowiedni typ rekordowy (CREATE TYPE)
Ad 2.
Ale pobierać gdzie w innej funkcji?
Jeśli tak to możesz sie przeiterować pętlą for po wynikach funkcji  (FOR typ IN SELECT funkcja () LOOP ... END LOOP;)
O to chodzi?