Oracle XE - 'GROUP BY' z parametrem powoduje błąd

0

Witam;

Wcześniej jakiś kolega założył temat, który poruszał ten wątek ale ktoś go usuną. Ja doszedłem już do tego że błąd pojawia się jeżeli w GROUP BY dodam jakiś parametr.

Przykładowo:
SELECT data, watrosc GROUP BY data; -wszystko jest OK

Z PreparedStatement:
SELECT data, watrosc GROUP BY ?;
prepState.setString(1, data); - i juz mam błąd składni

Chodzi o to że wszędzie mogę użyć parametru tylko nie w GROUP BY - dlaczego?

Może macie pomysł aby to ominąć, albo jak ma wyglądać poprawna składnia dla GROUP BY jeżeli chce wstawić tam parametr.

0

Jak byś jeszcze napisał jaki to błąd to było by super.

0

przez parametr przekazujesz WARTOŚĆ a nie nazwę kolumny

0
Misiekd napisał(a)

przez parametr przekazujesz WARTOŚĆ a nie nazwę kolumny

aaaaa, sorry faktycznie. Wanąlem sie przy pisaniu posta. Ma Tam być:

SELECT data, watrosc GROUP BY ?;
prepState.setString(1, "data"); - i juz mam błąd składni 

koziołek, baza danych Orace q10 XE, a error jest: ORA-00979 not a GROUP BY expression

0

A możesz zrobić "SELECT ? FROM tabela"? i Jako parametr przekazać np. pole 'wartosc'??

0
Majkel napisał(a)
Misiekd napisał(a)

przez parametr przekazujesz WARTOŚĆ a nie nazwę kolumny

aaaaa, sorry faktycznie. Wanąlem sie przy pisaniu posta. Ma Tam być:

SELECT data, watrosc GROUP BY ?;
prepState.setString(1, "data"); - i juz mam błąd składni 

ja wiem, że czytanie ze zrozumieniem w dzisiejszych czasach jest sztuką trudną i tajemną więc tym razem napiszę drukowanymi i będę pisał powoli

P R Z E Z P A R A ME T R M O Ż E S Z P R Z E K A Z A Ć W A R T O Ś Ć A N I E N A Z W Ę K O L U M N Y

Nie wiem jak to prościej napisać - może tak się nie da

0

OK, moze faktycznie przyklad wybralem fatalny ... wiec po prostu napisze to co mnie konkretnie interesuje

String grupa = "YYYY-MM"; // zmienna ta przyjmuje wartości ("YYYY", "YYYY-MM", "YYYY-MM-DD")
...

PreparedStatement kwerenda (String grupa) {
...
String sql = "SELECT to_char(data, ?), sum(wartosc) FROM tabela GROUP BY to_char(data, ?);"
prepState.toString(1, grupa);
prepState.toString(2, grupa);
...
}
(data - pole w tabeli typu data)

... i to gerneruje blad ORA-000979 not a group by expression

Jeżeli wklepię kwerende SQL : SELECT to_char(data, 'YYYY-MM'), sum(wartosc) FROM tabela GROUP BY to_char(data, 'YYYY-MM') -to wszystko działa.

0

bo ty generujesz takie zapytanie
SELECT to_char(data, YYYY-MM), sum(wartosc) FROM tabela GROUP BY to_char(data, YYYY-MM)
sprobuj je odpalic
i pomysl co jest zle

0

już ci pisałem w innym wątku, że tak

= S I Ę N I E D A =

takie zapytanie musisz posklejać

0

Hmm, ....brak mi słów, nie potrafię tego zrozumieć ...

Przeciez ta kwerenda jest poprawna i działa * SELECT to_char(data, 'YYYY-MM'), sum(wartosc) FROM tabela GROUP BY to_char(data, 'YYYY-MM') * ...co mnie dziwi ze nie da sie tego stworzyc w takim "wspanialym" jezyku programowania jakim jest Java.

Sklejenie zapytania poprzez "SELECT "+a+" FROM test;" (gdzie String a = "*" ) jest poziomem dennym. Ciekawi mnie czy profesjonalni programiści takiego czegoś używają, bo dla mnie jest to śmiech na sali żeby to była jedyna możliwość osiągnięcia celu.

....patologia.... chyba że na dziale Java ludzie coś wymyślą

0

nie mam nic javowego pod reka (i nie chce miec :P) ale chyba to powinno zadzialac (inna kwestia ze nie jest to najladniejsze rozwiazanie)

PreparedStatement kwerenda (String grupa) {
...
String sql = "SELECT to_char(data, '?'), sum(wartosc) FROM tabela GROUP BY to_char(data, '?');"
prepState.toString(1, grupa);
prepState.toString(2, grupa);
...
}

0

ja [CIACH!] już nie wiem jak ci to wytłumaczyć
pole(a) w SELECT i GROUP BY muszą być TE SAME Z PUNKTU WIDZENIA BAZY. Będą one te same jeśli je np. wpiszesz wprost w zapytaniu, albo podasz przez parametr ALE MUSI TO BYĆ JEDEN PARAMETR. To twoje zapytanie i kod podaje DWA RÓŻNE PARAMETRY, nieważne że ich wartość jest taka sama ale one są RÓŻNE!!!

W delphi mogę podać parametr przez nazwę i wtedy mimo iż występuje on w dwóch miejscach to jest to ten sam parametr!!

SELECT to_char(data, :data), sum(id_k) FROM gmnaglowki GROUP BY to_char(data, :data)

rozumiesz teraz czy dalej będziesz jęczał jaki to biedny jesteś...

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