DELIMITER $$
USE `gongwuyuan_0630`$$
DROP PROCEDURE IF EXISTS `cp_data`$$
CREATE DEFINER = `space` @`172.21.%` PROCEDURE `cp_data` (IN tb_name VARCHAR (100))
BEGIN
DECLARE v_result_tb_name VARCHAR (100) ;
DECLARE v_note_tb_name VARCHAR (100) ;
DECLARE v_mark_tb_name VARCHAR (100) ;
DECLARE v_ol_question VARCHAR (100) ;
DECLARE v_old_db VARCHAR (100) ;
DECLARE v_new_db VARCHAR (100) ;
DECLARE v_mark_id INT ;
DECLARE v_tid INT ;
#修改数据库名,需要根据生产环境修改数据名
SET v_old_db = "gongwuyuan_0630" ;
SET v_new_db = "chapter_591up" ;
SET v_ol_question = CONCAT(v_old_db, ".ol_question") ;
SET v_note_tb_name = CONCAT(v_new_db,'.common_questionnote') ;
SELECT SUBSTRING(tb_name,LENGTH('new_answerresult_') + 1) INTO v_tid ;
SET v_result_tb_name = CONCAT(v_new_db, '.answerresult_', v_tid) ;
SELECT MOD(v_tid, 20) INTO v_mark_id ;
SET v_mark_tb_name = CONCAT(v_new_db,'.markedquestion_',v_mark_id);
SET tb_name = CONCAT(v_old_db, ".", tb_name) ;
#1. 插入作答记录表
SET @SQL_CONTEXT = CONCAT(
"INSERT IGNORE INTO ",v_result_tb_name,
" (`CourseId`,`UserId`,`QuestionId`,`TotalRightCount`,`TotalWrongCount`
,`TotalCount`,`TotalCostTime`,`IsLastRight`,`LastResult`,`LastCostTime`,
`LastTime`
) SELECT
n.SUBJECT,
n.UserId,
q.Id,
n.CorrectCount,
n.ErrorCount,
n.TotalCount,
n.TotalCostTime,
n.LastIsCorrect,
REPLACE(
REPLACE(
REPLACE(
REPLACE(
LastAnswerXML,
']]></i></a><a><i><![CDATA[',
'",
"'
),
'<as><a><i><![CDATA[',
'[""'
),
']]></i></a></as>',
'""]'
),
'<as></as>',
''
) json,
#n.LastAnswerXML,
if(n.LastCostTime>32767,32767,n.LastCostTime)LastCostTime,
n.LastAnswerTime
FROM ",tb_name," n INNER JOIN ",v_ol_question,
" q USING(questionid) WHERE n.SUBJECT = 10") ;
PREPARE smtp FROM @SQL_CONTEXT ;
EXECUTE smtp ;
DEALLOCATE PREPARE smtp ;
#2.插入笔记
SET @SQL_CONTEXT = CONCAT(
"INSERT IGNORE INTO ",v_note_tb_name,"(`UserId`,`QuestionId`,`Content`,`IsPublic`,`IsAudited`,`UpdateTime`,`DigCount`)
SELECT
n.UserId,
q.Id,
n.Reviews,
n.IsPublic,
1,
n.LastAnswerTime,
0
FROM ",tb_name," n INNER JOIN ",v_ol_question,
" q USING(questionid)
WHERE n.SUBJECT = 10 AND Reviews>'' AND Reviews<>'为什么做错了?是因为....'"
) ;
PREPARE smtp FROM @SQL_CONTEXT ;
EXECUTE smtp ;
DEALLOCATE PREPARE smtp ;
#3. 导入错题
SET @SQL_CONTEXT = CONCAT(
"INSERT IGNORE INTO ",v_mark_tb_name,"(
`UserId`,
`QuestionId`,
`TypeId`,
`RootCatalogId`,
`CreateTime`,
`CourseId`
)
SELECT
n.UserId,
q.Id,
n.AnswerResultCategory,
n.RootCatalogId,
n.LastAnswerTime,
n.SUBJECT
FROM ",tb_name," n INNER JOIN ",v_ol_question," q USING (questionid)
WHERE n.SUBJECT = 10
AND AnswerResultCategory IN (2, 3, 6)" );
PREPARE smtp FROM @SQL_CONTEXT ;
#select @SQL_CONTEXT;
EXECUTE smtp ;
DEALLOCATE PREPARE smtp ;
END $$
DELIMITER ;
分享到:
相关推荐
oracle 批量插入数据存储过程。亲测好用。支持 plsql ,toad,等数据库分析软件。主要包括变量的定义,循环及游标的使用等, 亲测好用
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
需要注意的是,导入存储过程可能会覆盖已存在同名的存储过程,因此在操作前要确保不会丢失重要数据。此外,如果存储过程中引用了源数据库特有的对象(如表、视图或函数),在导入到新环境中时可能需要调整依赖关系。...
以下是一个简单的MySQL存储过程示例,用于插入数据: ```sql CREATE PROCEDURE importData(IN dataText TEXT) BEGIN DECLARE i INT DEFAULT 1; WHILE i (dataText) DO INSERT INTO your_table (column1, column2...
2. **处理多个存储过程**:若需要执行多个存储过程,可以在同一个会话中依次执行。 3. **处理权限问题**:如果遇到权限不足的问题,需要先授予相应的执行权限。 #### 六、注意事项 - **权限管理**:确保有足够的...
标题和描述中提到的"一个项目的存储过程.sql"文件,很可能包含了该项目在数据库管理中使用的各种存储过程的定义。 存储过程的优势在于: 1. **性能优化**:由于存储过程在首次创建时被编译,之后的每次调用只需要...
专门用于管理员到数据的存储过程,很好用
为了实现更为复杂的导出功能,可以编写一个存储过程来完成数据的导出工作。例如,下面的存储过程`p_exporttb`可以将表中的数据导出到真正的Excel文件中: ```sql create proc p_exporttb @tbname sysname, -- 要...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许程序员或数据库管理员预编译一系列SQL语句,形成一个可重用的程序单元。在本场景中,我们关注的是如何利用存储过程进行数据库的备份与还原,这在数据管理中至...
一个存储过程由一系列的SQL语句组成,包括SELECT、INSERT、UPDATE、DELETE等,以及控制流程语句(如IF-ELSE、WHILE、DECLARE等)。这些语句可以按照特定的逻辑顺序执行,使得处理复杂的业务规则变得更加容易。存储...
标题与描述概述的知识点是关于如何使用PL/SQL...通过以上解析,我们可以看到,PL/SQL存储过程为从文件导入数据到数据库提供了一个强大而灵活的解决方案,不仅提高了数据处理的效率,也增强了数据管理的可靠性和安全性。
2. 创建存储过程:接下来,编写一个存储过程来解析XML并插入数据。Oracle提供了DBMS_XMLGEN和XMLTYPE等包来处理XML数据。以下是一个基本示例: ```sql CREATE OR REPLACE PROCEDURE import_xml (p_xml CLOB) AS v_...
1. **数据一致性**:在进行物理恢复时,必须确保所使用的备份文件是在一个事务的一致性状态下生成的,否则可能会导致数据损坏。 2. **兼容性问题**:当使用不同版本的MySQL进行恢复时,需要注意版本之间的兼容性问题...
执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...
首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro_user`都是在`book`数据库中的存储过程。你可以使用MySQL命令行客户端或者可视化工具(如MySQL...
根据提供的文件信息,我们可以构建一个详细的SQL Server存储过程来实现将表中的数据转换为`INSERT INTO`脚本的功能。此存储过程将适用于多种数据类型,并能够动态生成插入语句,以便用户可以方便地导出数据作为脚本...
`MySqlUtil.java`可能包含与MySQL数据库交互的通用工具类,`MySqlJdbcTest.java`和`MySqlTest.java`则可能包含了具体的测试用例,比如创建触发器、执行存储过程、备份和恢复数据的代码实例。 总之,通过JDBC,Java...
MySQL数据库存储过程是数据库管理系统中一个非常重要的特性,它允许开发者编写一组预编译的SQL语句,以函数或过程的形式存储在数据库中,供后续调用。这极大地提高了数据库应用的性能和效率,因为存储过程只需要在...
SQL2008存储过程是数据库管理中一个关键的组件,它是一组预先定义并编译的SQL语句,用于执行特定的任务。在本教程中,“最新最全SQL2008存储过程解密”旨在帮助用户深入理解和掌握存储过程的各个方面,确保100%的...