用select...into語句
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、網站空間、營銷軟件、網站建設、寧海網站維護、網站推廣。
下面是mysql 5.0的幫助文檔的:
這個SELECT語法把選定的列直接存儲到變量。因此,只有單一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用戶變量名在MySQL 5.1中是對大小寫不敏感的。請參閱9.3節(jié),“用戶變量”。
重要: SQL變量名不能和列名一樣。如果SELECT ... INTO這樣的SQL語句包含一個對列的參考,并包含一個與列相同名字的局部變量,MySQL當前把參考解釋為一個變量的名字。例如,在下面的語句中,xname 被解釋為到xname variable 的參考而不是到xname column的:
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
當這個程序被調用的時候,無論table.xname列的值是什么,變量newname將返回值‘bob’。
mysql給字符串變量賦值的方法是用select into 變量結構完成賦值。
使用sql的結構語法:
SELECT ... INTO var_list selects column values and stores them into variables.
比如定義一個sql變量:
@x varchar(10);
@y varchar(20);
select id,name INTO @x,@y from dx_tt
這樣就完成了賦值。
DELIMITER?$$
USE?`test`$$
DROP?PROCEDURE?IF?EXISTS?`p_getAllTablesCount`$$
CREATE?DEFINER=`root`@`localhost`?PROCEDURE?`p_getAllTablesCount`()
BEGIN
DECLARE?tableName?VARCHAR?(100);
DECLARE?tablesn?VARCHAR?(100);
DECLARE?tableCount?INT;
DECLARE?stopFlag?INT;
DECLARE?sqlStr?VARCHAR(1000);
--?注意:請修改數據庫名稱
DECLARE?cursor_name?CURSOR??FOR?SELECT?TABLE_NAME??FROM?information_schema.tables?WHERE?table_schema='test';
DECLARE?CONTINUE?HANDLER?FOR?SQLSTATE?'02000'??SET?stopFlag=1;
CREATE?TABLE?IF?NOT?EXISTS?temp_table(table_name?VARCHAR(100),table_count?VARCHAR(100));???
OPEN?cursor_name;
REPEAT
FETCH?cursor_name?INTO?tableName;
SET?sqlStr?=?CONCAT('SELECT?COUNT(1)?into?@tableCount?FROM?',?tableName);
SELECT?sqlStr?INTO?@sqlStr;
--?select??@sqlStr;
SELECT?@tableCount?INTO?tableCount;
BEGIN
PREPARE?stepInsertIntoTable?FROM?@sqlStr;
EXECUTE?stepInsertIntoTable;
END;
SET?sqlStr?=?CONCAT('insert?into??temp_table?values(''',CONCAT(tableName),''',''',CONCAT(tableCount),''');');
SELECT?sqlStr?INTO?@sqlStr;
BEGIN
PREPARE?stepInsertIntoTable?FROM?@sqlStr;
EXECUTE?stepInsertIntoTable;
END;
UNTIL?stopFlag??END?REPEAT;
CLOSE?cursor_name;???
SELECT?table_name,table_count?FROM?temp_table?ORDER?BY?table_count?DESC;
--?PREPARE?step?FROM?@sql1;
--?EXECUTE?step;
DROP?TABLE??temp_table;
END$$
DELIMITER?;