» Poradna » Programy

Oracle procedura na SELECT

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 20/20
 |   |   |  [212.90.230.---]

Zdravim, muzete mi nekdo poradit, jak v Oracle 10g vytvorit pojmenovany a ulozeny blok (zrejme procedura), ktery mi pouze provede prikaz SELECT .....

diky

Odpovědi na otázku

 |   |   |  [62.245.120.---]

ctreate or replace procedure jsem_vul as

v_int integer;
begin

select id
into vIid
from jsemVul
where id=1;

end;


Kapisto?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

nejak prave nerozumim tomu into vIid? taky nevim proc tam deklaruji promennou v_int ?

diky moc

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

potřebuji z te procedury dostat ty hodnoty, z konzole si SELECT normalne vypisu, ale jak to predat z te procedury? co kdyz budu mit vetsi pocet vracenych vysledku?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [194.228.235.---]

Tomíku, to je nejen funkční, ale i vtipné )

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [62.245.120.---]

ted trochu vazneji.

Doma nemam oracle, takze poradim postup.

dej typ parametru out na rowtype. napriklad.

p_return output mojeschema.mojetabulka%rowtype;

a v procedure dej

select *
into p_return
where id > 10;

a pak muzes vratit recordset, majici vice vet


Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

no a kdyz mam SELECT z nekolika tabulek, a zaroven treba nejaky agregovany atribut? nemuzu pouzit schema tabulky, protoze zadnou takovou nemam. zkousel jsem to pres nekolik promennych (%type), do kterych ukladam jednotlive atributy SELECTU, ale nejak mi to nechce vratit vice zaznamu

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

napr. SELECT jmeno, prijmeni FROM Clovek WHERE vek > 22; kde Clovek(id,jmeno,prijmeni,vek,adresa)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

ORA-01422: exact fetch returns more than requested number of rows

diky

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [195.168.51.---]


skus pouzit
TYPE type_tab IS TABLE OF tab%rowtype;
var_tab type_tab;
select * BULK COLLECT INTO var_tab from tab;
for i in var_tab.first .. vat_tab.last
loop
  dbms_output.put_line(var_tab(i).st lpec);
end loop
 

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

nejak nevim, porad mi to hlasi chybu
CREATE OR REPLACE PROCEDURE zobraz_plodiny (nazev CHAR, cena NUMBER) AS
DECLARE
TYPE type_tab IS TABLE OF Pokus.Plodina%rowtype;
p_tab type_tab;
BEGIN
SELECT nazev_plodiny, nazev_odrudy, cena_osiva BULK COLLECT INTO p_tab FROM Plodina WHERE nazev_plodiny=nazev AND cena_osiva=cena;
FOR i IN p_tab.FIRST .. p_tab.LAST
LOOP
DBMS_OUTPUT.PUT_LINE(p_tab(i).nazev_plodiny);
END LOOP;
END zobraz_plodiny;
/

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [89.173.30.---]

mozno to je tym ze nie su v selecte uvedene vsetky stplce z Plodina, skus select *
jednoduchsie riesenie na jednorazove pouzitie moze byt:
for rec in (select * from Plodina where nazev_plodiny=nazev AND cena_osiva=cena)
loop
  dbms_output.put_line(rec.nazev_plodiny);
end loop;
ak som sa nepomylil. Pricom rec nema byt deklarovane.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

procedura se vytvorila bez chyby, dokonce jsem ji spustil: PL/SQL procedure successfully completed. ale zadny vystup na cmd :(

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

pritom kdyz stejny SELECT provedu primo na prikazovem radku, dostanu pozadovany vysledek

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [89.173.30.---]

vyskusal by som spustit len dbms_output.put_line('test');
ci to vobez nieco vypisuje

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

nevypsalo to nic asi nejake nastaveni, ale nevim jake??

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [89.173.30.---]

ja pouzivam pl/sql developer vystup zobrazuje v specialnom okne,
mozno pomoze vyskusat nieco z tadialto
http://www.psoug.org/reference/dbms_output.html

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

uz to jede, musel jsem nastavit serveroutput on no ale to je jen cast meho zajmu, protoze ja bych pak ten vystup z ORACLE potreboval namapovat na nejakou tridu v APS.NET (C#) a ten vystup DBMS_OUTPUT asi neni to prave, ne??

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [89.173.30.---]

tak to by som ten select spustal priamo aps.net

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [89.173.30.---]

tak to by som ten select spustal priamo v aps.net

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.90.230.---]

prave ze mame mit funkcnost v procedurach na strane serveru :)

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Oracle, Procedura, Select, Blok



Určitě si přečtěte


Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

** Tesla představila elektrický kamion ** Má obdivuhodný výkon i dojezd ** Prodávat by se měl už za dva roky

Dnes | Vojtěch Malý | 68

30 počítačových brzd, které vám zpomalí Windows

30 počítačových brzd, které vám zpomalí Windows

Na webu najdete hromadu rad, jak zrychlit počítač a Windows. My jsme na to šli opačně a naopak jsme hledali činnosti, které ho nejvíce zpomalují. Toto je třicítka těch základních.

12.  11.  2017 | Jakub Čížek | 90

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

** Každá elektrická krabička má konektor pro napájení nebo baterii ** Jenže pozor, jednou by to tak nemuselo být ** Drobná elektronika se může živit rádiovými vlnami

14.  11.  2017 | Jakub Čížek | 15