GBase 8a
适配迁移
文章

Gbase8A之动态SQL:动态建表,动态插入

发表于2026-03-23 14:52:4662次浏览9个评论

测试存储过程如下:

drop procedure apps.create_dynamic_table_insert;
DELIMITER //

CREATE PROCEDURE apps.create_dynamic_table_insert(IN table_name VARCHAR(64))
BEGIN
  -- 1. 声明变量用于存储动态SQL
  DECLARE sql_stmt TEXT;
  -- 2.声明变量保存插入语句
  DECLARE sql_stmt2 TEXT;

  -- 2. 构造建表语句字符串 表名在SQL中需要用反引号(`)引起来
  SET sql_stmt = CONCAT('CREATE TABLE `', table_name, '` (    employee_id INT,
   employee_name VARCHAR(50),
   department_id INT)');

  -- 3. 准备并执行动态SQL
  -- 先将字符串赋值给用户变量
  SET @dynamic_sql = sql_stmt;
  PREPARE stmt FROM @dynamic_sql;
  EXECUTE stmt;

  -- 4. 释放预处理语句
  DEALLOCATE PREPARE stmt;

  –  返回成功信息
  SELECT CONCAT('Table `', table_name, '` created successfully.') AS result;
  -- 插入数据
 SET sql_stmt2 =  CONCAT('insert into `', table_name, '` (employee_id,employee_name,department_id) values (1,\'emp1\',2) ;');
    select sql_stmt2 ; 
  SET @dynamic_sql = sql_stmt2;
  PREPARE stmt FROM @dynamic_sql;
  EXECUTE stmt;

  -- 4. 释放预处理语句
  DEALLOCATE PREPARE stmt;

END //

DELIMITER ;

调用存储过程:传入表名即可

执行完成 回显成功信息:

 

执行插入数据:

执行调用,测试如下: 

评论

登录后才可以发表评论
经纬发表于 4个月前
学习了
用户头像
柒柒天晴发表于 4个月前
学习了
GBase用户21182发表于 4个月前
学习
GBase用户21182发表于 4个月前
好好学习
GBase用户21182发表于 4个月前
大家一起加油
GBase用户47954发表于 3个月前
感谢作者的精彩分享!
ljt98发表于 2个月前
学会了
GBase用户51887发表于 2个月前
加油
曾云林发表于 2个月前
厉害了