2016-06-03 7 views
-1

Ich habe eine gespeicherte Prozedur in mysql geschrieben, die eine TEMPORARY TABLE erstellen wird, möchte ich auf die Daten von TEMPORARY TABLE mithilfe von Codeigniter.But zugreifen, wenn ich "$ this-> db-> query()" aufrufen gibt leere Daten zurück.Wie rufe ich mysql TEMPORARY TABLE von CodeIgniter?

$data=array(); 
$call_procedure = "CALL sp_Stock()"; 
$query = $this->db->query($call_procedure); 
$sql="SELECT * FROM StockTable"; 
$query1 = $this->db->query($sql); 
+0

Es work.please sicherstellen soll, dass Ihre Prozedur Zeilen in Ihrer stockTable eintritt. –

+0

Ja Es zeigt resultset in sqlYog. – babun

Antwort

0

Ich habe meinen Weg geändert, um die Daten anzuzeigen. Und ich ändere es bei der gespeicherten Prozedur.

DELIMITER $$ 
CREATE PROCEDURE sp_Stock() 
BEGIN 

DECLARE cursor_finish INTEGER DEFAULT 0; 
DECLARE m_numofpurchaseBag DECIMAL(10,2)DEFAULT 0; 
DECLARE m_purchasedKg DECIMAL(10,2)DEFAULT 0; 
DECLARE m_purBagDtlId INTEGER DEFAULT 0; 



DECLARE stockCursor CURSOR FOR 
SELECT purchase_bag_details.`actual_bags`, 
(purchase_bag_details.`net`*purchase_bag_details.`actual_bags`) AS PurchasedKg, 
purchase_bag_details.`id` AS PurchaseBagDtlId 
FROM 
purchase_invoice_detail 
INNER JOIN 
purchase_bag_details 
ON purchase_invoice_detail.`id`= purchase_bag_details.`purchasedtlid` 
INNER JOIN 
`do_to_transporter` 
ON purchase_invoice_detail.`id` = do_to_transporter.`purchase_inv_dtlid` 
WHERE purchase_invoice_detail.`teagroup_master_id`=6 
AND purchase_invoice_detail.`id`=1481 
AND do_to_transporter.`in_Stock`='Y'; 

-- declare NOT FOUND handler 
DECLARE CONTINUE HANDLER 
FOR NOT FOUND SET cursor_finish = 1; 

DROP TEMPORARY TABLE IF EXISTS StockTable; 


#temptable creation 
CREATE TEMPORARY TABLE IF NOT EXISTS StockTable 
(
    purchaseBagDtlId INT, 
    purchasedBag NUMERIC(10,2), 
    purchasedKg NUMERIC(10,2), 
    blendedBag NUMERIC(10,2), 
    blendedKg NUMERIC(10,2), 
    stockBag NUMERIC(10,2), 
    stockKg NUMERIC(10,2) 
); 
#temptable creation 
OPEN stockCursor ; 
get_stock : LOOP 

FETCH stockCursor INTO m_numofpurchaseBag,m_purchasedKg,m_purBagDtlId; 

IF cursor_finish = 1 THEN 
LEAVE get_stock; 
END IF; 

/*SELECT m_numofpurchaseBag,m_purchasedKg,m_purBagDtlId; */ 

/* Blending bag query*/ 
SET @m_numberofBlndBag:=0; 
SET @m_BlndKg:=0; 

/* Blend bag*/ 
SELECT @m_numberofBlndBag:=SUM(blending_details.`number_of_blended_bag`) AS belendedBag INTO @m_numberofBlndBag 
FROM blending_details 
WHERE blending_details.`purchasebag_id`= m_purBagDtlId 
GROUP BY 
blending_details.`purchasebag_id`; 
#Blend Bag 

#Blend Kgs 
SELECT @m_BlndKg:=SUM(blending_details.`qty_of_bag` * blending_details.`number_of_blended_bag`) AS blendkg INTO @m_BlndKg 
FROM blending_details 
WHERE blending_details.`purchasebag_id`= m_purBagDtlId 
GROUP BY 
blending_details.`purchasebag_id`; 


SET @m_StockBag:=(m_numofpurchaseBag - @m_numberofBlndBag); 
SET @m_StockKg:=(m_purchasedKg - @m_BlndKg); 
INSERT INTO StockTable 
(
    purchaseBagDtlId , 
    purchasedBag , 
    purchasedKg , 
    blendedBag , 
    blendedKg , 
    stockBag , 
    stockKg  
)VALUES(m_purBagDtlId,m_numofpurchaseBag,m_purchasedKg,@m_numberofBlndBag,@m_BlndKg,@m_StockBag,@m_StockKg); 

END LOOP get_stock; 
CLOSE stockCursor; 
SELECT * FROM StockTable; 
#DROP TABLE StockTable; 
END$$ 
DELIMITER ; 
#CALL sp_Stock(); 
0

Überall Ich verwende eine temporäre Tabelle ich dies ausgeführt wird, bevor die temporäre Tabelle erstellt:

$this->db->query('DROP TABLE IF EXISTS StockTable'); 

Ich scheine jemand daran zu erinnern, lesen das gleiche Problem wie Sie mit und aus irgendeinem Grund haben um das oben genannte zuerst auszuführen.

So versuchen:

$data=array(); 
$call_procedure = "CALL sp_Stock()"; 
$this->db->query('DROP TABLE IF EXISTS StockTable'); 
$query = $this->db->query($call_procedure); 
$sql="SELECT * FROM StockTable"; 
$query1 = $this->db->query($sql); 
+0

Danke, ich habe es vom Back-End verwaltet. Ich habe es bei Stored Procedure geändert. – babun