Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

lista kao parametar

[es] :: Firebird/Interbase :: lista kao parametar

[ Pregleda: 2829 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon lista kao parametar01.03.2010. u 07:43 - pre 171 meseci
Imam jednu SP u kojoj neki selecti mogu koristiti samo IN operator. IN operator koristi CSV listu (meni treba cca. 20 članova lsite za što je IN idealan) i sve bi bilo OK kad ja tu listu funkciji ne bi trebao slati kao parametar. Ako je pošaljem kao varchar baš i neće uspjeti.

U Delphiju radim sa multiselected gridom i za označene redove trebam storu koja nešto odrađuje na bazi. Znam napraviti da stora svaki put odradi nešto za određeni ključ, no ne želim tako. Ja želim pokupiti sve ključeve za koje treba nešto odraditi i onda sam jednom pozvati storu koja će mi to odraditi u jednoj transakciji, uz manje prometa i sve ostalo što takav pristup nosi.

Dakle, moje ppitanje je, koji tip parametra slati IN operatoru? Postoji li neki UDF koji to riješava?

Unaprijed hvala!
God is real unless is declared as integer.
 
Odgovor na temu

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon Re: lista kao parametar01.03.2010. u 09:07 - pre 171 meseci
Pa da odgovorim sam sebi ;-)

Code:
  for execute statement ' select id, brdok from zag where id in (' || :niz || ')'

  into :id, :brdok

  do
  ...




No još uvijek tražim elegantnije i manje "'prljavo' riješenje.
God is real unless is declared as integer.
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.dynamic.sbb.rs.



+6 Profil

icon Re: lista kao parametar01.03.2010. u 11:40 - pre 171 meseci
Napravi novu tabelu. Pre izvršavanja tvoje SP popuni tu tabelu sa članovima liste koja ti treba za IN operator. U tvojoj SP, kao parametar za IN operator koristi SELECT koji čita elemente iz te tabele.

Primer:
Code:

SELECT A.ID, A.FirstName, A.LastName
  FROM Table1 A
  WHERE A.ID IN (SELECT B.ID FROM Table2 B)


"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

Član broj: 59888
Poruke: 138
*.dynamic.isp.telekom.rs.

Sajt: www.topcode.rs


+2 Profil

icon Re: lista kao parametar01.03.2010. u 18:21 - pre 171 meseci
Ja koristim proceduru kojom od liste pravim tabelu, pa onda joinujem sa tom procedurom sta hocu.... Da bude jasnije:
Code:
create procedure SP_STRING_TO_TABLE (
    STR varchar(200),
    DELIM varchar(1) = ',')
returns (
    LINE varchar(25))
as
declare variable I integer = 1;
declare variable E integer = 1; /* Zadnji koji je nadjen */
declare variable LEN integer = 0; /* duzina stringa */
BEGIN
  /* TRACE-UJEM PROSLEDJENI STRING - RAZDVAJAM STAVKE ODVOJENE :DELIM */
  I=1; e=1;                          
  LEN=CHAR_LENGTH(STR);
  WHILE (I<=LEN) DO
    BEGIN
    IF ((SUBSTRING(STR from I for 1)=:DELIM) or (i=len)) THEN
       BEGIN
       --
       if (SUBSTRING(STR from I for 1)=:DELIM) then
          LINE=SUBSTRING(str from e for i-e);
       else
          LINE=SUBSTRING(str from e for i-e+1);
       --
       i=i+1; e=i;
       if ((line<>:delim) and (line<>'')) then -- ako je na kraju , da ne prikazujem
        suspend;
       END
    ELSE
      I=I+1;
    END
END

pa onda...
Code:
select id, brdok from zag z
inner join SP_STRING_TO_TABLE(:niz,';') s on s.line=z.id

 
Odgovor na temu

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon Re: lista kao parametar02.03.2010. u 07:49 - pre 171 meseci
Da Schild, mislio sam na nešto takvog tipa, no nadao sam se da je netko nekad za to napravio neku UDF funkciju jer je to vjerujem jako često u uporabi.
God is real unless is declared as integer.
 
Odgovor na temu

[es] :: Firebird/Interbase :: lista kao parametar

[ Pregleda: 2829 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.