Smycka ve stored procedure – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Smycka ve stored procedure – MS SQL – Fórum – Programujte.comSmycka ve stored procedure – MS SQL – Fórum – Programujte.com

 

VladislavK0
Super člen
19. 9. 2015   #1
-
0
-

Zdravím

mam View ktere mi vrati to co potrebuji a ted bych to view potreboval volat ve SP tak aby vracena data se ulozily do lokalni promene te SP.

Dale bych tyto data (vzdy cely radek) potreboval projit ve smycce a nad jednotlivymi radky vykonavat dalsi praci, v podstate neco jako

Foreach(DataRow dr in DataTable.Rows)

nejak dalsi akce mojeprocedura @param1=dr["nazev sloupce"] atd...

v podstate jse zkoncil na tomto

BEGIN
	SET NOCOUNT ON;
	Declare @data sqlresult
    
	set @data= (SELECT * from ListAnnonce)
	
END

otazka zni 

nevim jestli to takto vubec jde

nevim jaky typ pro deklaraci te promene data

nevim jakym nejvhodnejsim zpusobem vytvorit tu smycku ... while, loop atd

dika za kazdou radu

Nahlásit jako SPAM
IP: 37.48.43.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Kit+15
Guru
19. 9. 2015   #2
-
0
-

#1 VladislavK
Zkus to raději udělat bez stored procedure. Podle popisu by na to měl stačit obyčejný JOIN.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
VladislavK0
Super člen
19. 9. 2015   #3
-
0
-

nene to view je plne joinu

a vraci dle where to co potrebuji a ja se fakt potrebuji rztocit ve smycce nad curent daty ziskanych tim view

Nahlásit jako SPAM
IP: 37.48.43.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Kit+15
Guru
19. 9. 2015   #4
-
0
-

#3 VladislavK
Tak použij ten cyklus. Jen si to řádně rozmysli, protože PL/SQL nemá (na rozdíl od JOIN) jak ten cyklus optimalizovat. Může to tedy znamenat významné zpomalení dotazu.

Také můžeš ten pohled materializovat do dočasné tabulky, nad kterou můžeš ten další JOIN provést.

Ještě stále jsi nenapsal, kvůli čemu ten cyklus potřebuješ. Proto opakuji: Nechtěj ten cyklus, dokud to skutečně nebude nezbytně nutné.

BTW: Už sem cyklus ve stored procedure použil, ale začátečníkům vždy radím, aby se to snažili vyřešit jinak.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
VladislavK0
Super člen
19. 9. 2015   #5
-
0
-

ja nevim jak bch to mel udelat jinak ale z toho view mi vybehne par radku realne mezi 5-10

a tou smyckou potrebuji vytvorit vysledek kdy hodnoty ze stejneho sloupce seradim do vedle sebe do jedno radku takze vysledek bude jeden radek e vsemi hodnotami ze vsech radku a vybranych sloupcu asi takto

vstupem je

S1     S2     S3    S4    S5

1        12     5      aaa   bbb

2       -5      12     aba  bab

a vystup

S1    S2       S3       S4           S5

1,2; 12,-5;  5,12;   aaa,aba; bbb,bab;

proste jeden radek z vice radku

Nahlásit jako SPAM
IP: 37.48.47.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Kit+15
Guru
19. 9. 2015   #6
-
0
-

#5 VladislavK 

CREATE TABLE vstup (s1 INTEGER, s2 INTEGER, s3 INTEGER, s4 VARCHAR(8), s5 VARCHAR(8));
INSERT INTO vstup VALUES (1, 12, 5, 'aaa', 'bbb');
INSERT INTO vstup VALUES (2, -5, 2, 'bab', 'aba');
SELECT CONCAT_WS('; ', 
    GROUP_CONCAT(s1 SEPARATOR ','), 
    GROUP_CONCAT(s2 SEPARATOR ','), 
    GROUP_CONCAT(s3 SEPARATOR ','), 
    GROUP_CONCAT(s4 SEPARATOR ','), 
    GROUP_CONCAT(s5 SEPARATOR ',')
) AS vystup FROM vstup;

Výsledek: 

1,2; 12,-5; 5,2; aaa,bab; bbb,aba
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
VladislavK0
Super člen
20. 9. 2015   #7
-
0
-

Dik za odpoved

vcera uz jsem se odmlcel ale to co jsi naposledy odpovedel je az ten finalni kus kodu 

vcelem zadani z prispevku 5 chybi jedna info, to view se bude na nejvysi urovni volat bez where za to ale s DISTINCT(na jiny datum sloupece)

v te smycce zavolam stejne view tentokrate s where na tu hodnotu jedniheho sloupce datumu sem se mi teprve vratit tech radovych  5-10 radku nad kterymi potrebuji vykonat cca ten kod na ktery jsi odpovidal tim jsem si odpovedel na tu otazku jakeho typu mam pouzit tu prvni promenou data viz nasleduji kod

BEGIN
	SET NOCOUNT ON;
	Declare @data date
	Declare @secData ???typ???
	set @data= (SELECT distinct(Datum) from ListAnnonce)
	loop()
		Set @secData=SELECT * from ListAnnonce where Datum=data[xxxx] -- to znamena komplet radky a sloupce
		-- ated je potrebuji sestavit do toho jednoho radku
	end()
	-- tedy vysledkem bude tabulka o ruznem poctu radku ale vzdy se stejnym seznamem sloupcu
END

tak snad jje to uz srozumitelnesi

a prvni otazka je jaky typ bych mel pouzit pro tu promenou secData a jak spravne roztocit tu smycku

za druhe jestli pouzit Loop nebo while nebo neco jineho a jak

dik za pomoc

Nahlásit jako SPAM
IP: 37.48.47.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Kit+15
Guru
20. 9. 2015   #8
-
0
-

#7 VladislavK
Odpověděl jsem na #5. Místo "vstup" tam dáš patřičný view. Nevím, co ještě řešíš. Prostě cyklus na tyto věci nepotřebuješ. Ten můj SELECT prostě strčíš jako další sloupec do svého SELECTu přes který mi tady vnucuješ svoji představu iterace.

Je to popsáno v manuálu, tak netuším, co tady stále řešíš. Nepočítej s tím, že ti budu radit, jak udělat cyklus. Střílet se do nohy se můžeš naučit i beze mne.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý