ORACLE - Select w procedurze

0

Witam, mam problem z Oraclem ponieważ chcę żeby mi procedura po podaniu parametru zwracała wyniki tj. np.

CREATE OR REPLACE PROCEDURE Select_imiona(par_nazwa in varchar2) 

AS
  
BEGIN

        SELECT miasto FROM tabela WHERE imie=par_nazwa;

ENDL;

Prosze o podpowiedz jak to zrobić bo wywala mi błędy że select musi być z INTO.

0

Nie bardzo wiem jaki jest sens tej procedury jednakze jesli upierasz sie przy takim rozwiazaniu to musisz zadeklarowac dwa parametry:

  1. typu IN - par_nazwa
  2. typu OUT - zwracana_wartosc.

Dodatkowo w BODY (ciele) procedury musisz przypisac wartosc uzyskana z selecta do zmiennej zwracana_wartosc (typu OUT)

W takim przypadku po wykonaniu procedury zmienna ("variable") zwroci Ci odpowiednia wartosc.

Lepszym rozwiazaniem w tym przypadku bedzie stworzenie funkcji (a nie procedury) i przypisanie poprzez Result:="cos" w ciele funkcji zwracanej wartosci. Przy takim rozwiazaniu bedziesz mogl wykorzystac funkcje wprost jako np. kolejny warunek w zapytaniu.

Jesli chcesz aby napisac CI taka funkcje i procedure to daj znac.

0
netus napisał(a)

Nie bardzo wiem jaki jest sens tej procedury jednakze jesli upierasz sie przy takim rozwiazaniu to musisz zadeklarowac dwa parametry:

  1. typu IN - par_nazwa
  2. typu OUT - zwracana_wartosc.

Dodatkowo w BODY (ciele) procedury musisz przypisac wartosc uzyskana z selecta do zmiennej zwracana_wartosc (typu OUT)

W takim przypadku po wykonaniu procedury zmienna ("variable") zwroci Ci odpowiednia wartosc.

Lepszym rozwiazaniem w tym przypadku bedzie stworzenie funkcji (a nie procedury) i przypisanie poprzez Result:="cos" w ciele funkcji zwracanej wartosci. Przy takim rozwiazaniu bedziesz mogl wykorzystac funkcje wprost jako np. kolejny warunek w zapytaniu.

Jesli chcesz aby napisac CI taka funkcje i procedure to daj znac.

Wielkie dzięki, potrzebuje takie procedury np. do tego by podawać warunki zapytania i żeby zwracała mi odpowiednie wartości np. będę chciał wyswietlić wszytskie osoby które mieszkają w jakimś mieście ale nie konkretnym. i dlatego chce sobie zrobić procedure która to robi i jako parametr dać miasto i wtedy będe sobie mógł wpisac dowolne miasto i procedura mi zwróci tabele z wynikami tj. wszytski osobami co mieszkaja w podanym mieście.

0
--tworzysz typ, który będzie jednym rekordem
CREATE OR REPLACE TYPE pozycje AS object
(
  l_p NUMBER,
  towar VARCHAR2(7),
  nazwa VARCHAR2(30),
  jm VARCHAR2(3),
  netto NUMBER,
  brutto number
);
/

CREATE OR REPLACE TYPE pozycje_tab
  AS TABLE OF pozycje;

--a potem funkcje 
FUNCTION TowaryWPojemniku(
  c_id_dok  IN VARCHAR2,
  c_nr_poj  IN NUMBER)
  RETURN pozycje_tab pipelined AS
BEGIN
  FOR cur IN (SELECT l_p, towar, nazwa, jm, netto, brutto FROM opakowania_hierarchiczne_v WHERE id_dok = c_id_dok AND nr_nadrzednego = c_nr_poj)
  LOOP
    pipe ROW(pozycje(cur.l_p, cur.towar, cur.nazwa, cur.jm, cur.netto, cur.brutto));
  END LOOP;
  RETURN;
END TowaryWPojemniku;

--a odwołujesz się tak
select * from TABLE(TowaryNaPalecie('aa', 1))

UWAGA: Działa od Oracle 10

qkamill napisał(a)

Wielkie dzięki, potrzebuje takie procedury np. do tego by podawać warunki zapytania i żeby zwracała mi odpowiednie wartości np. będę chciał wyswietlić wszytskie osoby które mieszkają w jakimś mieście ale nie konkretnym. i dlatego chce sobie zrobić procedure która to robi i jako parametr dać miasto i wtedy będe sobie mógł wpisac dowolne miasto i procedura mi zwróci tabele z wynikami tj. wszytski osobami co mieszkaja w podanym mieście.
potrzebujesz zapytania z parametrem a nie procedury

0

Dzięki za podpowiedź. A tak sie zastanawiałem i czy nie prościej by było zrobić widok (np. w moim przykładzie co podałem wyrzej) wszytskich osób w wszytskich miastach i potem odwoływac się do widoku i tylko zmieniając nazwe miasta??

Pozdrawiam!

0

Witam, skorzystałem z rad Misiekd pomogło. Dzięki za pomoc :)
Pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1