Jump to content
php.lv forumi

Ibase - stored procedure's


Gacha

Recommended Posts

Atradu daudz viss visādus manuāļus, tutoriāļus utt, bet tā īsti līdz gaam nesapratu, kā lai pareizi izmanto jau gatavas procedūras.

Gribu panākt kaut košādu:

SELECT viens, divi, my_proc(tris) AS tris FROM TABHULA

 

zinu, ka sintakse nav tada, ka vajaga, bet cerams, ka sapratāt :)

Link to comment
Share on other sites

saucaas triggeri, nezinu vai mysql tagad taada fiicha ir, bet agraak nebija.

triggeris jau nu ir pavisam kaut kas cits.

 

Triggeris ir kaut kāds darbību kopums, kas tiek izveikts automātiski pie kaut kādām darbībām datubāzē. Teiksim uzliekam trigeri lietotāju datu tabulai, ka gadījumā, ja kāds jauns lietotājs piereģistrējas (notiek insert darbība tabulā), tad tiek aizsūtīts e-pasts sistēmas administratoram.

 

Stored procedures ja nemaldos ir paredzeetas MySQL sākot ar versiju 5.0. Tā kā tikko ir palaista tautās (production ready) tikai 4.1, tad par MySQL un stored procedures var uz brīdi aizmirst.

 

Ja runa ir par kādu DB pārvaldības sistēmu, kas atbalsta stored procedures, tad attiecīgi uz servera ir jāizpilda SQL fragments, kas līdzīgi kā veido tabulas, uzveidos arī pašu procedūru.

Link to comment
Share on other sites

zinu, ka sintakse nav tada, ka vajaga, bet cerams, ka sapratāt :)

Īsti nesapratu gan. Ja tu domā tieši sintakse kā izsauc funkcijas/procedūras, tad jau tev fja ir pareizi izsaukta. Par procedūrām nedaudz atšķirās katram SQL serverim. Skaties IBase dokumentācijā kā. A ja tu prasīji tieši par pašu definēšanas sintaksi, tad kas gan vēl varētu būt labāks par manuāli :)

Link to comment
Share on other sites

Ta es ari dariju, bet ka, lai pieshkjir kadam mainigajam atgriezto vertibu?

SQL:

 

execute procedure procedura(); <-- inputam ir :inputs un autputam :output

 

Select viens, :inputs AS divi, tris AS :outputs FROM TABULA

 

Vēlos kaut ko šādu panākt ;)

Link to comment
Share on other sites

Ā, tev funkciju vajag! Tas execute tikai procedūrām strādā.

Tad turpat vien arī ir piemērs: funkcija ORDER_LIST kurai padod CUST_NO kā ieejas parametru, un fja atgriež PO_NUMBER kā rezultātu.

SELECT * FROM ORDER_LIST(:CUST_NO)
WHERE (PO_NUMBER > :PO_NUMBER)
ORDER BY PO_NUMBER DESC

Link to comment
Share on other sites

Lieta ir tāda, ka stradaju ar vienu datubāzi, kur ir jau iebuvetas dažas noderigas proceduras attiecīgo datu apstrādei. Vēlos izmantot kādu no tām procedūrām, lai atlasītu datus.

Gribu padot procedūrai 2 parametrus, kurus iegūstu esoshajā selektā un tad rezultātu piešķirt arī kādam mainīgajam.

Link to comment
Share on other sites

Nu pieņemsim tev definēta šāda procedūra:

CREATE PROCEDURE MY_PROC (IN_PARAM_1 INTEGER,  IN_PARAM_2 INTEGER) RETURNS (OUT_PARAM INTEGER) AS
 BEGIN 
   ...
 END

Tad tās izsaukšanai būtu jāizskatās šādi:

SELECT OUT_PARAM FROM MY_PROC(5, 6)

 

Tie koli laikam vispār ir vajadzīgi tikai Delphi ;)

Edited by bubu
Link to comment
Share on other sites

Tad sanāk, ka es ar vienu sql pieprasijumu iegustu rezultatu no procedūras, bet vai es tai pasha 'querijā' varu vel veikt darbības?

ibase_query($con, "

SELECT OUT_PARAM FROM MY_PROC(LAUKS1, LAUK2) WHERE KAUTKAS=KAUTKO;

SELECT FINISHS AS OUT_PARAM, LAUK3,LAUK4,LAUKS5 WHERE KAUTKAS=KAUTKO

");

 

Nu doma ir tāda, ka gribu viena un tai pasha pieprasijumā parveidot datus ar to proceduru un tad pieshkjirt to kada mainigajam un vel ari atlasit visus parejos nepiecieshamos datus.

Link to comment
Share on other sites

Tur jau nu subselekts jātaisa.

Piemēram, lai pielietotu to MY_PROC visiem tabulas ierakstu a un b laukiem:

SELECT tabula.ID, x.OUT_PARAM FROM tabula, (SELECT OUT_PARAM FROM MY_PROC(tabula.a, tabula.b)) x

Edited by bubu
Link to comment
Share on other sites

Kur man te vaina:

 

SELECT OBJEKTI.OBJ_CENA, OBJEKTI.C_LK_VALUTA, X.ARATE FROM OBJEKTI, (SELECT ARATE FROM GETVALKURSS(OBJEKTI.C_LK_VALUTA, 'LVL', 'TODAY')) X

 

PS. ARATE ir tas kas atgriezhas

Link to comment
Share on other sites

×
×
  • Create New...