【问题标题】:How can I set a variable as a `table` in a procedure?如何在过程中将变量设置为“表”?
【发布时间】:2019-08-26 04:19:33
【问题描述】:

t2 有 2 列 (id, tablename) 具有这些值 (1,2,3) x (toto,titi,tata):

id|tablename|
1 |toto|
2 |tata|
3 |titi|

我想创建一个以 id 作为用户变量输入的过程并执行以下操作:

BEGIN 

 CREATE TABLE `newtable` AS (
 SELECT * FROM (SELECT tablename from t2 WHERE id=2); 
     );
END

结果应该就像查询是:

BEGIN
CREATE TABLE `newtable` AS (
SELECT * FROM `tata`
);
 END

【问题讨论】:

  • 你想达到什么目的?只想创建一个从现有表中选择数据的表?为什么不能只在过程中设置用户定义的变量?基于此变量,您的创建表语法将是错误的
  • 发布相同的答案,请验证。
  • 感谢更新的评论和帖子,将提供相同的更新。
  • 如果答案确实有帮助,请点赞。

标签: mysql select


【解决方案1】:
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `pr_create_table_by_reference`(
    IN `str_new_table_name` VARCHAR(50),
    IN `int_id` INT

)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN

    DECLARE STR_TABLE_NAME VARCHAR(1000) DEFAULT NULL;

    SELECT tablename INTO STR_TABLE_NAME FROM t2 WHERE id = int_id LIMIT 1;

    SET @prep_stmt = CONCAT('CREATE TABLE ', str_new_table_name ,' as ( SELECT * FROM ',  STR_TABLE_NAME , ')');

    PREPARE stmt FROM @prep_stmt; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt;
END

$$

程序调用

SET @new_table:= 'newTable';
SET @id:= 2;
CALL `pr_create_table_by_reference`(@new_table, @id);

OR 

CALL `pr_create_table_by_reference`('newTable', 2);

【讨论】:

  • id 应该是用户变量输入,而不是newtable
  • 刚看到更新的问题,现在很清楚,很快就会提供更新。
  • 你也可以看到这个:stackoverflow.com/questions/57650882/…
  • 让我也检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2021-09-06
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多