[ORACLE 9] 3 pytania laika

0

Witam.

Mam 3 pytania

Jak zrobic aby cos takiego dzialalo

SELECT xx FROM dual

Zeby jako wynik wyświetlił sie tekst 'xx' ?

Drugie pytanie czy jest możliwość zrobienia czegoś takiego

SELECT * FROM dual

IF x = 0 THEN
WHERE y = '1' AND ITD.
ELSE IF x = 2
WHERE y = '1'
END IF

Czy trzeba to wszystko w jednej klauzuli WHERE ?

  1. Jak zrobic ponizsza operację ?
    Czyli z jednego selecta wyciagam zmienna( Ale zeby wyciagnela sie tylko RAZ a nie wyciagala sie do kazdego rekordu od nowa) i przekazuje ja innemu selectowi

Select * from dual
where
3 < x

UNION
SELECT cos as X from dual

0

A i jeszcze jedno pytanie

jak zrobic aby byla kolumna z liczba wiersza

np.

1 X
2 Y
3 Z

itd.

Dzieki

0

SELECT 'xx' FROM dual
2.
Nie wiem o co chodzi, ale może o coś takiego:
...where y=decode(x,0,'1',2,'1') and ...
3.
Nie rozumiem pytania
4.
select rownum, a.* from tablica a

0

Ad. 2: użyj

WHERE y = (CASE x
WHEN 0 THEN '1'
WHEN 1 THEN '2'
...
END)

Ad.4: Nie wiem dokładnie o co Ci chodzi, ale to co próbujesz zrobić wygląda totalnie bez sensu.
Nie da się odwoływać z jednego podzapytania do drugiego. Naomiast można z podzapytania do zapytania otaczającego, np tak:

SELECT * FROM t1 WHERE x = (SELECT costam FROM t2 WHERE t1.id = t2.id)

0

Napisze to jaśniej

Mam funkcje nazwijmy ją FUNKCJA1

Ona bardzo dlugo mieli :)

i jak dam cos takiego

SELECT * FROM TABELA t
WHERE t.pop = FUNKCJA1('1')

Dajac kod taki jak powyżej dla każdego wiersza FUNKCJA1 bedzie sie wykonywac co powoduje starszne zamulenie.
Chce zeby zapisal sie gdzies wynik FUNKCJA1('1') abym mógł pożniej w klauzuli WHERE dać wynik co znacząco przyspieszy zapytanie

0
gosc napisał(a)

A i jeszcze jedno pytanie

jak zrobic aby byla kolumna z liczba wiersza

np.

1 X
2 Y
3 Z

Skorzystaj z pseudokolumny rownum, która numeruje elementy resultseta.

select rowum, t.* from tabela t;
0
gosc napisał(a)

Napisze to jaśniej

Mam funkcje nazwijmy ją FUNKCJA1

Ona bardzo dlugo mieli :)

i jak dam cos takiego

SELECT * FROM TABELA t
WHERE t.pop = FUNKCJA1('1')

Dajac kod taki jak powyżej dla każdego wiersza FUNKCJA1 bedzie sie wykonywac co powoduje starszne zamulenie.

Sprawdzałeś? :>
Może to i prawda na jakiś opensourcach, ale z tego co wiem, Oracle tak głupi raczej nie jest.
Odnośnie funkcji stałych nie sprawdzałem, ale np. nieskorelowane podzapytania bardzo ładnie LICZY TYLKO RAZ (ewentualnie zamieni na JOIN lub SEMI-JOIN):

SELECT * FROM t1 WHERE x IN (baaaaardzo skomplikowany SELECT)

Wyznaczanie funkcji stałych jest o niebo łatwiejsze, więc zdziwiłbym się mocno, gdyby tego nie robił automatycznie.

Natomiast jeśli ta funkcja jest b. złożona, sama zawiera zapytania i rzeczywiście ORA się gubi, to co za problem - wrzuć jej wyniki do zmiennej przez SELECT INTO, a następnie wykonaj właściwego selecta (PL/SQL).

Chce zeby zapisal sie gdzies wynik FUNKCJA1('1') abym mógł pożniej w klauzuli WHERE dać wynik co znacząco przyspieszy zapytanie

Najpierw sprawdź, czy to rzeczywiście problem, później optymalizuj.

0

Niestety sprawdzilem i jest tak jak opisałem. Moze w wyzszej wersji jest lepiej(ja uzywam 9).
Dziękuje za powyzsza pomoc

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