SELECTY w pętli for

0

Witam Serdecznie,

Mam pewien problem ze zleceniem dla klienta.

Klient zarzyczyl sobie aby informacje wyciagane z bazy danych były "wzbogacone" o nazwe procesu który te dane do bazy wkladal. O ile jego numer posiadam, o tyle nazwe, musze wklepywac recznie.

Wiec musze zmienic moje zapytanie, i wyswietlac rekordy jeden po drugim umieszczajac dodatkowo nazwy.
Jako że wyników do wyświetlenia jest około 16, a zapytanie stosunkowo długie z zagnieżdżonymi selectami, to nie oplaca mi się kopiować tego 16 razy wy wyswietlic linijke po linijce. Chcialam napisać pętlę która bedzie to wykonywac.

moj pomysl jest taki aby w skrypbie ksh ( linux) zadeklarowac sobie tablice ( w rzeczywistosci potrzebuje 3)

set -A Tab1  nazwa1 nazwa2 nazwa3 nazwa4
set -A opt1  1 3 5 6
set -A opt2  3 7 5 3

Jest tak dlatego, że to jaki proces wlozyl pewne dane do bazy, moge znalezc, na podstaiwe wartosci w odpowiedniej kolumnie

i teraz moj pomys l byl taki że po połaczeniu sie do bazy

sqlplus .... blablabla

SET HEADS  OFF

BEGIN 
FOR iterator IN 0 ..3 LOOP
SELECT '${TAB1[iterator]}' ,PROCES_ID, ILE_KO , ILE_OK, CZAS 
FROM  TABELA_1
WHERE  DETALE LIKE '%cos_tam%wartosc=${opt1[iterator]}%wartosc2=${opt2[iterator]}%'
END LOOP;
END;

I problem jest taki, że to nie dziala...
Dostaje komunikat zwrotny Iterator bad number i jako linijke w której to wystepuje, to linia polaczenia do bazy...

Jeżeli zamiast petli, wpisze tak samo zastepujac iterator numerem indexu, to dane wysweitlaja sie prawidlowo.

Jeszcze co do pierwszej kolumny, to jest wlasnie ta wartosc dodana, w wersji ktora mamy bazy konkatenacja poprzez || 'cost tam' || nie dziala, tylko w taki sposob jaki podalam .

Pozdrawiam

0

Wnioskuję, że chodzi o oracle po składni. Niestety nie do końca rozumiem co potrzebujesz uzyskać. Z tego co napisałaś o kopiowaniu selecta wnioskuję, że chodzi o jakiś union?

0

nie nie..

Chodzi o to że ja musze wyciagnac z bazy pewne rekordyi pozniej recznie je nazwac. To jaka nazwe beda mialy te rekordy, zalezy od tego co znajduje sie w kolumnie DETALE.. pole DETALE ma mniej wiecej postac

"this = null, vra1=null, opt=1, status=3, att=4" itd....
i teraz "

set -A Tab1 nazwa1 nazwa2 nazwa3 nazwa4
set -A opt1 1 3 5 6
set -A opt2 3 7 5 3

Jak widzisz opt1 i status 3 odpowiada nazwa 1...

Czyli ten rekord musze wyswietlic jako nazwa1.

wiec chcialam zrobic petle, ktora przeszuka rekordy w pazie po Opt1 i Opt2 w pedli

0

Chyba się dzisiaj nie wyspałem bo dalej nie do końca łapię. Masz select np taki:

select ID,  DETALE  from tabela where ... coś tam

select zwraca Ci np coś takiego

ID DETALE
1 "this = null, vra1=null, opt=1, status=3, att=4"
2 "this = null, vra1=null, opt=2, status=7, att=4"

Teraz czego nie rozumiem to dlaczego opt1 i status=3 ma zwracać nazwa1.

Vanilka napisał(a):

set -A Tab1 nazwa1 nazwa2 nazwa3 nazwa4
set -A opt1 1 3 5 6
set -A opt2 3 7 5 3

Jak widzisz opt1 i status 3 odpowiada nazwa 1...

Czy Tab1 i opt1 oraz opt2 to tabele? Jeśli tak to pewnie są spięte jakimś kluczem dlaczego set -A opt1 1 3 5 6 ma zwracać Nazwa1?

Rozumiem, że chciałabyś uzyskać coś takiego:

ID DETALE NAZWA
1 "this = null, vra1=null, opt=1, status=3, att=4" nazwa1
2 "this = null, vra1=null, opt=2, status=1, att=0" nazwa2

tak?

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