1
我正在創建一個存儲過程,它需要一些輸入參數。我希望能夠選擇使用哪個數據庫,此後根據如下所示的條件,我想使用正確的條件。MySQL動態設置數據庫名稱並選擇db.schematable
我知道你不能在存儲過程中使用「USE」關鍵字,我也嘗試在查詢中設置@ds,但沒有太多成功。
我使用的Navicat並在IDE中定義了我的參數,我輸入PARAMS是:
- icustomername VARCHAR(255)
- ipostcode VARCHAR(255)
- iaccountnumber VARCHAR(255)
- imemberdbname VARCHAR(255)
SQL
BEGIN
declare dbName varchar(255); --attempt at using db name passed in
select imemberdbname into dbName;
set @ds = concat(dbName,'.customers'); -- I have also tried this
if LENGTH(icustomername) > 0 THEN
(Select customerid, customername, postcode, accountnumber from dbName.customers
WHERE customername = icustomername);
ELSEIF len(ipostcode) > 0 THEN
(Select customerid, customername, postcode, accountnumber from dbName.customers
WHERE postcode = ipostcode);
ELSE
(Select customerid, customername, postcode, accountnumber from dbName.customers
WHERE accountnumber = iaccountnumber);
end if;
END
我無法選擇db.table以執行選擇。這有可能嗎?還是有更好的解決方案?
因此,對於我的查詢將每個選擇是一個單獨的@stat? – Haris
從我所看到的,你所有的查詢基本上都是一樣的。您可以保留一個@stat來執行,並使用您的變量動態設置表名和where語句。 – Tom
此聲明將被包裝在BEGIN END中? – Haris