簡體   English   中英

MySQL存儲過程返回選擇

[英]MySQL Stored Procedures Returning Select

這是一個非常基本的MySQL問題,但我找不到答案。 假設以下存儲過程體;

DECLARE Existing INT DEFAULT 0;
SELECT SQL_CALC_FOUND_ROWS name FROM users WHERE id = pid LIMIT 1;
SELECT FOUND_ROWS() INTO Existing;
Select Existing;

當我運行它時,它總是返回第一個SELECT結果。 但是我希望它返回最后一個(SELECT Existing)結果。 這種行為是否正常? 如果是這樣,我怎么能改變它,因為第一個選擇僅用於檢查,最后一個是我需要的。

(真正的邏輯與此不同,我在這里簡化了它)

你可以這樣做:

SELECT COALESCE(id/id, 0) AS Existing
    FROM users 
    WHERE id = pid 
    LIMIT 1;

如果找到id則返回1(id / id = 1)。 如果未找到id則返回0(id / id為IS NULL,COALESCE將返回0)。

問題是您用來運行存儲過程的MySQL“客戶端”。 存儲過程將返回所有查詢的結果集,但客戶端應支持它。 您是在phpMyAdmin或其他類似客戶端運行查詢嗎? 嘗試使用默認客戶端調用存儲過程 - 命令提示符,您將看到它返回所有查詢的結果。 請閱讀本頁的最后一段。

現在這是一些指針。 現在來看看如何從過程中返回值。 您可以使用OUT參數執行此操作,該參數用於將過程中的值傳遞回調用方。 在MySQL網站上閱讀此頁面上的更多內容 - 該頁面上的示例解釋了這一點。

希望這可以幫助!

只是為了調試,如果兩個select sql返回列數相等,你可以使用union:

選擇1,'100'聯合選擇'3434',2;

您可以創建表變量,填充它,然后從中進行選擇

CREATE PROCEDURE my_proc () BEGIN 

CREATE TEMPORARY TABLE TempTable (myid int, myfield varchar(100)); 
INSERT INTO TmpTable SELECT tblid, tblfield FROM Table1; 

SELECT * FROM TEMPORARY;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM