SQL, AGINITY - Dostęp Do Danego Numeru Rekordu

0

Witam.
Czy istnieje w sql jakieś rozwiązanie w którym mógłbym dostać się do danych rekordów w pętli jak to ma miejsce w różnych językach programowania, np:

for(int i = 0; i < XX; i++)
if i < XX nazwa += kolumna[i] + ";"
if i = XX nazwa += kolumna[i] + ".";

Przykład co chciałem uzyskać w procedurze:

BEGIN 

i:= 0;

FOR kolumny in SELECT distinct TABLE_NAME FROM tabela_metadanych
LOOP
	sql:='select COLUMN_NAME c FROM tabela_metadanych where table_name like '||kolumny.TABLE_NAME;
	for wynik in execute sql loop
	  rekordy:=wynik.c;
	end loop;
	
	sql:='select count(COLUMN_NAME) d FROM tabela_metadanych where table_name like '||kolumny.TABLE_NAME;
	for wynik in execute sql loop
	  help:=wynik.d;
	end loop;
	
	if i < help then
		rek := rek||rekordy[i]||',';	
		i:=i+1;
	elsif i = help then
		rek := rek||rekordy[i];
	end if;
	
	sql := 'select count(*) a from (select '||rek||' from '||kolumny.table_name||' tb
	where jakiswarunek 
	minus 
	select '||rek||' FROM '||kolumny.table_name||' tb2) roznice';
	for wynik in execute sql loop
	cnt:=wynik.a;
	end loop;
	
	INSERT INTO jakastabela VALUES (kolumny.TABLE_NAME,cnt);
	COMMIT;
	i:= 0;
	
 END LOOP;

Przy takim czymś oczywiście wyskakuj błąd:
transformArraySubscripts: type VARCHAR is not an array

dodanie znacznika <code class="cpp"> - @furious programming

1

Wszystko się da :) O ile w Oracle jest to dużo prostsze o tyle w MSSQL również się da. Poniżej przykład, który znalazłem na szybko:

declare 
  @L Table (IDTask int, IDEmission int, IDContent int, frequency bigint, starttime datetime, stoptime datetime, 
                  LContent varchar(max), ContentType varchar(1))   
  insert into @L exec [dbo].[sp_GetRelatedLogicalContents] @Komentarz, @IDLogicalContent, '';
  declare rec cursor static forward_only read_only for select LContent from @L  
   --
  open rec
  --
  fetch next from rec into @IDCont
  while @@FETCH_STATUS = 0  
  begin
    exec dbo.sp_AddRelatedLogicalContent @IDLogicalContent, @IDCont
    fetch next from rec into @IDCont
  end
  close rec   
deallocate rec 
0

Mam zatem nadzieję że na netezzie również nie będzie problemu. Czas iść do domu, także na razie nie pobawię się. Ale w międzyczasie, może ktoś korzystał z podobnego rozwiązania w aginity?
A może ktoś ma jakiś prosty pomysł jak sprawnie sprawdzać różnice między bliźniaczymi tabelami? Przypuśćmy, że do sprawdzenia jest koło 100...

0

Bliźniaczymi tabelami, znaczy masz dwie tabele o tej samej strukturze i chcesz znaleźć różnice w danych? Do tego masz operator MINUS, tylko nie bardzo rozumiem, na czym miałoby polegać porównywanie stu tabel - jaki miałby być wynik tej operacji?

0

Minus, minus, jednak problem przychodzi właśnie kiedy masz do porównania więcej tabel o podobnej strukturze. Pomyślałem, że najlepiej by było zrobić counta (tak jak w przykładzie w moim pierwszym poście), a potem jeśli gdzieś by wyszły różnice, to już ręcznie je znaleźć. Można by było rozbić też sprawdzanie różnic kolumna po kolumnie - choć wykładniczo zabiera to znacznie więcej czasu - i wynik również albo zliczyć sumą różnic na każdej kolumnie, albo wypluć nazwy kolumny, które się różnią w danej tabeli. Nie wiem, może jest jakaś lepsiejsza możliwość? Imho sam sposób wykonania też mnie nurtuje, bo jak widać w 1 poście mam doświadczenia marne w tym rejonie, a jedyny pomysł jaki miałem to coś w rodzaju wyłuskiwania z tablicy danych nazw kolumn z dołączeniem znaków " , " żeby struktura zapytania była prawidłowa...

1 użytkowników online, w tym zalogowanych: 0, gości: 1