-1

以下は私のストアドプロシージャです

   DELIMITER $$

USE `us_db`$$

DROP PROCEDURE IF EXISTS `getTransactionDetails`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `getTransactionDetails`(IN _MainDB VARCHAR(32),
                                IN _mobile VARCHAR(50), 
                                IN _market_id VARCHAR(50), 
                                IN _from DATE, 
                                IN _to DATE)
BEGIN

   SELECT 
    transaction_id AS txn_id,
    DATE_FORMAT(createdon,"%d-%b-%Y %H:%i:%S") AS createdon,
    order_id,
    order_conv_total AS amount,
    msisdn AS msisdn,
    channel_id,
    transmode_id,
    statusid,
    (SELECT fullname FROM _MainDB.entities WHERE entity_id=retailer_id) AS retailer,

    FROM `us_transaction` `t` WHERE

   t.market_id = _market_id AND msisdn = _mobile AND t.createdon BETWEEN CONCAT(DATE(_from)," 00:00:00") AND CONCAT(DATE(_to)," 23:59:59") ORDER BY t.createdon DESC LIMIT 100;

    END$$

DELIMITER ;

今の問題は、_MainDB を介して呼び出したい別の DB に小売業者の名前が格納されていることです。このDB名が引数として来ていますが、_MainDBはvarchar型とみなされるため、正しく来ていません。ストアド プロシージャの引数として DB 名を取得するにはどうすればよいですか?

4

1 に答える 1

0

ユーザー変数と CONCAT 関数。

DECLARE STR VARCHAR(1000)   
SET @STR = 'SELECT 
            transaction_id AS txn_id,
            ........
                            (SELECT fullname FROM  
        '
SET @STR = CONCAT(@STR,@_MAINDB)
SET @STR = CONCAT(@STR,'.entities ..................')      

PREPARE STMT FROM @STR
EXECUTE STMT
于 2013-09-26T11:44:56.650 に答える