簡體   English   中英

在存儲的mysql過程中聲明一個用作參數的變量

[英]Declaring a variable for using as parameter in stored mysql procedure

我正在嘗試實現一個簡單的計數器 ,該計數器在SQL查詢的多個語句中作為參數傳遞(請參見下文)。 我有以下測試環境

CREATE TABLE `test`.`TableA` (
`ColumnA` INT( 3 ) NOT NULL ,
`ColumnB` INT( 5 ) NOT NULL
) ENGINE = MYISAM ;

ALTER TABLE `TableA` ADD INDEX ( `ColumnA` ) 

INSERT INTO `TableA` (`ColumnA`, `ColumnB`) VALUES 
(2, 4654), (2, 223), (5, 12), (4, 32), (3, 23), (5, 21), (1, 2), (2, 2), (4, 2), (5, 1);

我需要為每個計數器迭代編號的輸出文件(而AFAIK的一種方法是使用存儲過程)

CREATE PROCEDURE dowhile()
BEGIN
  DECLARE CONT INT DEFAULT 5
  WHILE CONT > 1 DO
  BEGIN
        SELECT TableA.ColumnB
        INTO OUTFILE CONCAT('OUT', CONT)
        FROM TableA
        WHERE TableA.ColumnA = CONT
    SET CONT = CONT - 1
  END
  END WHILE
END;
  • 當我嘗試執行時,我遇到語法錯誤,但是我無法弄清楚問題出在哪里: “#1064-您的SQL語法有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以了解在附近使用正確的語法“當繼續> 1時,請開始選擇TableA.ColumnA INTO OUTFILE CONCAT('OUT''在第4行”
  • 如何執行此存儲過程?

看起來有2個問題:

  • mysql-client解釋任何“;” 在將過程交給服務器之前,因此您必須首先設置其他定界符
  • 您不能像在這里嘗試的那樣將動態文件名用作外文件

通過大量的Google搜索,我得出了與MySql 5.1.51一起使用的以下解決方案:

delimiter //

CREATE PROCEDURE doWhile()
BEGIN
  DECLARE CONT INT DEFAULT 5;
  DECLARE filename VARCHAR(32);
  WHILE CONT > 1 DO
        SET @myvar = CONCAT('SELECT TableA.ColumnB INTO OUTFILE', "'", CONCAT('OUT', CONT), "'", 'FROM TableA WHERE TableA.ColumnA = ', CONT );
        PREPARE stmt1 FROM @myvar;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
        SET CONT = CONT - 1;
  END WHILE;
END

暫無
暫無

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

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