2012-10-24 10 views
6

Robię trochę POC. Napisałem jedną przechowywaną procedurę w MySQL. Używam MySQLWorkbench do operacji na bazach danych, takich jak tworzenie nowej tabeli, procedur składowanych, wykonywanie zapytań itp. Obserwuję pewne nieoczekiwane zachowanie podczas wykonywania, mimo że kod wygląda poprawnie pod względem składniowym i logicznym.Brak oczekiwanego wyniku podczas używania tabeli Temp lub kursora w MySQL

Oto punkty.

Approach 1 -

W pierwszym podejściu, tworzę tabelę tymczasową i dodawania rekordów użyciu INSERT INTO ... SELECT z wybranych kolumn.

CREATE TEMPORARY TABLE XYZ(....); 

INSERT INTO XYZ (....) SELECT (....) FROM ABC WHERE clause; 

Po wykonaniu tej czynności, otrzymuję wartości null tylko w kilku kolumnach tabeli temp i wszystkich innych kolumn tabeli temp zostanie wypełniona prawidłową wartość.

Jeśli uruchomię tę samą instrukcję select (dla tej samej klauzuli where) w oddzielnej zakładce SQL, widzę poprawne wyniki nawet dla pary kolumn otrzymujących wartość null w tabeli temp.

Jeśli zmienię powyżej INSERT INTO..SELECT gwiazdką (wszystkie kolumny), a następnie uzyskać poprawny wynik w tabeli temp ..

INSERT INTO XYZ SELECT * FROM ABC WHERE clause; 

Ale nie chcemy wszystkie kolumny. Próbowałem również utworzyć tabelę tymczasową z ENGINE = value. Ale nie działa. Nawet próbowałem wszystko to podejście z normalnym stole (bez tymczasowego), ale niestety

Podejście 2 -

W drugim podejściu, ja zmodyfikowana samą procedurę przechowywaną z kursorem zamiast tabeli temp. Ale nawet w tym przypadku kursor nie otrzymuje żadnych rekordów.

DECLARE cur1 CURSOR FOR SELECT (....) FROM ABC WHERE clause; 

Jeśli uruchomię tę samą instrukcję select (dla tej samej klauzuli where) w oddzielnej zakładce SQL, widzę poprawne dane wyjściowe.

Czy robię coś nie tak? Czy mogę uzyskać jakieś sugestie na ten temat?

Z góry dziękuję.

+2

Czy można wyświetlić kolumny wybrane w instrukcji SELECT, a także strukturę tabeli dla tabeli źródłowej i tymczasowej? Trudno zobaczyć, co się dzieje bez tego. – SchmitzIT

+0

Dzięki Schmitz za powrót. Przepraszam za odpowiedź późno. Właściwie to odkryłem problem w podejściu nr 1. Główną przyczyną była nazwa zmiennej użytej jako jeden z parametrów IN. Użyłem tej samej nazwy zmiennej IN jako mojej nazwy kolumny tabeli. I dlatego, jak sądzę, było to po prostu nadpisaniem rzeczywistych wartości tabeli. Zmieniłem nazwę zmiennej IN, a mój zapisany proces przebiegał poprawnie. Dzięki za pomoc. –

+1

Proszę zaksięguj to jako odpowiedź i zaakceptuj, aby Twoje pytanie nie było już w toku. – RandomSeed

Odpowiedz

1

Wymyśliłem problem w podejściu nr 1. Główną przyczyną była nazwa zmiennej użytej jako jeden z parametrów IN. Użyłem tej samej nazwy zmiennej IN jako mojej nazwy kolumny tabeli. I dlatego, jak sądzę, było to po prostu nadpisaniem rzeczywistych wartości tabeli. Zmieniłem nazwę zmiennej IN, a mój zapisany proces przebiegał poprawnie.

Powiązane problemy