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

Update dataset s union u SQL-u

[es] :: Pascal / Delphi / Kylix :: Update dataset s union u SQL-u

[ Pregleda: 3706 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Update dataset s union u SQL-u11.09.2009. u 00:03 - pre 177 meseci
Koristim TIBDataset koji u SelectSQL-u ima union npr:

Code:

SELECT TABLICA, A, B, C
FROM
(
  SELECT 'TABLICA1' AS TABLICA, A, B, C FROM TABLICA1
  UNION
  SELECT 'TABLICA2' AS TABLICA, A, B, C FROM TABLICA2
) AS TABLICA


Kako kreirati ModifySQL i InsertSQL?

pokušao sam:
Code:

IIF(TABLICA = 'TABLICA1',
    UPDATE TABLICA1 SET A = :A, B = :B, C = :C WHERE A = :A,
    UPDATE TABLICA2 SET A = :A, B = :B, C = :C WHERE A = :A
   )


ovo ne prolazi. Postoji li način da se ovo riješi?
Ne mogu spojiti tablice TABLICA1 i TABLICA2 u jednu.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Update dataset s union u SQL-u11.09.2009. u 02:06 - pre 177 meseci
> ovo ne prolazi. Postoji li način da se ovo riješi?
> Ne mogu spojiti tablice TABLICA1 i TABLICA2 u jednu.

Ako koristiš FB/IB, možeš napraviti view (po imenu TABLICA) i na njemu definisati before insert trigger gde ćeš menjati ciljne tabele.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Update dataset s union u SQL-u11.09.2009. u 07:36 - pre 177 meseci
Može li malo detaljnije?
Koristim FB 2.1

Kako update na view? Zar view nije readonly? Selecti imaju i Join-ove.
Kako promjeniti tablicu u before insert?

[Ovu poruku je menjao franjo_tahi dana 11.09.2009. u 08:55 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Update dataset s union u SQL-u11.09.2009. u 11:37 - pre 177 meseci
> Kako update na view? Zar view nije readonly?

Jednostavan view (samo prost select iz jedne tabele) nije, a bilo koji view takođe nije ako su definisani triggeri na njemu.

> Selecti imaju i Join-ove.
> Kako promjeniti tablicu u before insert?

Code:


CREATE TRIGGER PROBA FOR TABLICA
BEFORE INSERT
AS
BEGIN
  IF (NEW.TABLICA = 'TABLICA1') THEN
     INSERT INTO TABLICA1 VALUES(NEW.A, NEW.B NEW.C);
  ELSE
     INSERT INTO TABLICA2 VALUES(NEW.A, NEW.B NEW.C);
END


 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Update dataset s union u SQL-u11.09.2009. u 12:10 - pre 177 meseci
Kreirao sam probnu tablicu i tigere, ali ništa... gdje griješim?
Za rad koristim IBManager 2005. Imam kreiran view kao selekt iz jedne tablice, na njemu mi je dozvoljen insert/update, a na ovom ne.

tablic:
Code:

CREATE VIEW TABLICA(
  PODRUCJE,
  SIFRAULAZA,
  TABLICA_ID)
AS
SELECT 'Z' AS PODRUCJE, SIFRAULAZA,TABLICA_ID
FROM T726
UNION
SELECT 'S' AS PODRUCJE, SIFRAULAZA,TABLICA_ID
FROM T522;


ovo su trigeri;
Code:

CREATE TRIGGER TABLICA_BI FOR TABLICA
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
  IF (NEW.PODRUCJE = 'Z') THEN
     INSERT INTO T726(TABLICA_ID, SIFRAULAZA) VALUES(NEW.TABLICA_ID, NEW.SIFRAULAZA);
  ELSE
     INSERT INTO T522(TABLICA_ID, SIFRAULAZA) VALUES(NEW.TABLICA_ID, NEW.SIFRAULAZA);
END;

CREATE TRIGGER TABLICA_BU FOR TABLICA
ACTIVE BEFORE UPDATE
POSITION 0
AS
BEGIN
  IF (NEW.PODRUCJE = 'Z') THEN 
     UPDATE T726 SET TABLICA_ID = NEW.TABLICA_ID, SIFRAULAZA = NEW.SIFRAULAZA WHERE TABLICA_ID = OLD.TABLICA_ID;
  ELSE
    UPDATE T522 SET TABLICA_ID = NEW.TABLICA_ID, SIFRAULAZA = NEW.SIFRAULAZA WHERE TABLICA_ID = OLD.TABLICA_ID;
END;


Kada kreiram insert triger tako da ne nabrajam field-ove za insert već insertam sve (ako primjer koji je napisao Savkic), dozvoljen je insert u view. Dozvoljava mi unos podataka (osim 'PODRUCJE'), ali nakon post, commit, refresh - podataka nema i nisu upisani u tablice...

[Ovu poruku je menjao franjo_tahi dana 11.09.2009. u 13:30 GMT+1]

[Ovu poruku je menjao franjo_tahi dana 11.09.2009. u 13:31 GMT+1]

[Ovu poruku je menjao franjo_tahi dana 11.09.2009. u 13:31 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Update dataset s union u SQL-u11.09.2009. u 12:56 - pre 177 meseci
Code:


CREATE TABLE TEST (A INTEGER, B INTEGER);
CREATE TABLE TEST2(A INTEGER, B INTEGER);
COMMIT WORK;

CREATE VIEW PROBA (PREFIX, A, B)
AS
SELECT '1' AS PREFIX, A, B FROM TEST
UNION ALL
SELECT '2' AS PREFIX, A, B FROM TEST2;
COMMIT WORK;

INSERT INTO TEST VALUES(10, 10);
INSERT INTO TEST VALUES(11, 11);
INSERT INTO TEST2 VALUES(100, 100);
INSERT INTO TEST2 VALUES(101, 101);
COMMIT WORK;

SET TERM ^ ;

CREATE TRIGGER TEST_BI FOR PROBA
ACTIVE BEFORE INSERT
AS
BEGIN
  IF (NEW.PREFIX = '1') THEN
    INSERT INTO TEST(A, B) VALUES(NEW.A, NEW.B);
  ELSE
    INSERT INTO TEST2(A, B) VALUES(NEW.A, NEW.B);
END;
^

SET TERM ; ^

COMMIT WORK;

select * from proba;

INSERT INTO PROBA(PREFIX, A, B) VALUES('1', 14, 14);
INSERT INTO PROBA(PREFIX, A, B) VALUES('2', 115, 115);
COMMIT WORK;

select * from proba;


 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Update dataset s union u SQL-u11.09.2009. u 13:24 - pre 177 meseci
Radi !!!
Ako se napravio direktno SQL s insertom, radi.
Moram još vidjeti u dataset-u.


IBMenager, po pregleda podataka, dozvoli dodavanje novog retka, upisa podataka (osim za PODRUCJE koji je fiksno i definira tablicu), ali ne upiše izmjene...

U svakom slučaju hvala na pomoči.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Update dataset s union u SQL-u11.09.2009. u 20:53 - pre 177 meseci
Isprobao sam s TIBDataSet-om, radi dobro, uredno se mogu izmjeniti podaci.
Ako ovo još nekoga zanima, da ne gubi vrijeme kao ja:

1 .Ako se generira DeleteSQL, mora se kreirati i triger Before Delete, u protivnom, kod otvaranja javlja: "Cannot update read-only view Tablica"
2. Ako se dodaju fields-ovi (Fields editor -> Add fields), svi će imati property ReadOnly postavljen na true pa je nemoguće raditi editiranje podataka i treba ih jednostavno izmjeniti u false.
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

Član broj: 59888
Poruke: 138
93.86.225.*

Sajt: www.topcode.rs


+2 Profil

icon Re: Update dataset s union u SQL-u14.09.2009. u 10:46 - pre 177 meseci
A mozes koristiti i UPDATE OR INSERT komandu, pa onda umesto BI i BU triggera, mozes imati jedam BIU (lakse za kasnije odrzavanje).
Code:
CREATE TRIGGER TEST_BIU FOR PROBA
ACTIVE BEFORE INSERT OR UPDATE
AS
BEGIN
  IF (NEW.PREFIX = '1') THEN
    UPDATE OR INSERT INTO TEST(A, B) VALUES(NEW.A, NEW.B);
  ELSE
    UPDATE OR INSERT INTO TEST2(A, B) VALUES(NEW.A, NEW.B);
END;
Btw, updatable view je cudesna stvar, mozes bukvalno od bilo kog upita napraviti da se moze updetovati.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Update dataset s union u SQL-u

[ Pregleda: 3706 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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