2009-10-27 10 views
21

Powiedzmy mamy procedurę przechowywaną wybranie czegoś z tabeli:Procedury składowane MySql: Jak wybrać z tabeli procedur?

 
CREATE PROCEDURE database.getExamples() 
SELECT * FROM examples; 

Jak mogę wykorzystać wynik z tej procedury w później wybrać? (Próbowałem

 
SELECT * FROM (CALL database.getExamples()) 

ale bez powodzenia.) powinienem używać SELECT ... INTO outVariable w procedurze? Czy zamiast tego powinienem użyć funkcji zwracającej tabelę?

+0

Próbuję znaleźć rozwiązanie, próbuję następujących, ale oczywiście typ danych zwrotnych ("TABLE") nie działa;

 CREATE PROCEDURE database.getExamples( OUT examplesTable TABLE /* <<< What datatype to use for a table? */ ) SELECT * FROM examples INTO examplesTable 
Czy jestem na dobrej drodze tutaj ..? – Cambiata

Odpowiedz

5

Przeformułowano pytanie w tym temacie: Can a stored procedure/function return a table?. Oczywiście nie jest to możliwe bez użycia tabel tymczasowych.

+3

Co sprawia, że ​​tak oczywiste, że nie jest możliwe bez tabel tymczasowych? To nie odpowiada na pytanie. – circuitry

+2

@circuitry Gramatyka wyjaśnia, że ​​MySQL nie zezwala na 'select * from getExmaples() ...'. To niekoniecznie oznacza, że ​​nie ma innego sposobu, aby to zrobić. To jest frustrujący problem; w PostgreSQL łatwo jest "wybrać * z getExamples() ...". –

+0

Wygląda na to, że czas na migrację do PSQL ... –

-2

W serwera SQL można wtedy zrobić SELECT * FROM database.getExamples()

Jeśli chcesz ponownie użyć „procedury”, a następnie, tak, chciałbym umieścić go w funkcji tabeli wyceniane.

W przeciwnym razie można po prostu WYBRAĆ do # współczesnej tabeli wewnątrz procedury przechowywanej.

+0

Witaj, RR! Próbuję, ale oczywiście typ danych „Tabela” nie jest poprawny: TWORZENIE database.getExamples procedury ( OUT examplesTable TABELA/* <<< Co typ danych do wykorzystania na stole * /?) SELECT * FROM examples INTOTabela – Cambiata

+3

SQL Server = Microsoft SQL Server i ma inne możliwości od MySQL. Oznacza to, że wiele rzeczy, które możesz zrobić w MS SQL, nie można zrobić w MySQL i vice wersecie. OP prosi o MySQL. – Erk

2
CREATE TABLE #TempTable 
(OID int IDENTITY (1,1), 
VAr1 varchar(128) NOT NULL, 
VAr2 varchar(128) NOT NULL) 

Populate temporary table 

INSERT INTO #TempTable(VAr1 , VAr2) 
SELECT * FROM examples 
+1

Dziękuję Dani! Oznacza to, że za każdym razem muszę przebudować cały stół? Wydaje mi się, że jest dla mnie dużo dodatkowej pracy. Po prostu uruchomienie CALL getExamples() oczywiście daje dane, których potrzebuję - pytanie, jak uzyskać do niego dostęp w instrukcji select ... – Cambiata

+1

To jest kod SQL Server. w mysql - możesz utworzyć tabelę tymczasową, a następnie ją upuść. – Dani

+0

Z punktu widzenia wydajności i nie jestem profesjonalistą, myślę, że będzie to prawie to samo, co użycie go w zagnieżdżonej instrukcji, prawdopodobnie istnieją pewne możliwości optymalizacji w opcji zagnieżdżonej, ale jeśli nie masz do czynienia z bardzo dużym/skomplikowanym wyborem nie zauważysz tego. – Dani

Powiązane problemy