Gbase8A之动态SQL:动态建表,动态插入
测试存储过程如下:
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 ;
调用存储过程:传入表名即可

执行完成 回显成功信息:

执行插入数据:

执行调用,测试如下:



评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526