`
cocos
  • 浏览: 400328 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

一个导数据的存储过程

阅读更多
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 批量插入数据存储过程

    oracle 批量插入数据存储过程。亲测好用。支持 plsql ,toad,等数据库分析软件。主要包括变量的定义,循环及游标的使用等, 亲测好用

    MySQL创建存储过程批量插入10万条数据

    MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...

    Sql Server 存储过程的导出导入.doc

    需要注意的是,导入存储过程可能会覆盖已存在同名的存储过程,因此在操作前要确保不会丢失重要数据。此外,如果存储过程中引用了源数据库特有的对象(如表、视图或函数),在导入到新环境中时可能需要调整依赖关系。...

    利用存储过程将Excel中数据导入到数据库表中

    以下是一个简单的MySQL存储过程示例,用于插入数据: ```sql CREATE PROCEDURE importData(IN dataText TEXT) BEGIN DECLARE i INT DEFAULT 1; WHILE i (dataText) DO INSERT INTO your_table (column1, column2...

    PLSQL中存储过程的建立,导出,导入,使用

    2. **处理多个存储过程**:若需要执行多个存储过程,可以在同一个会话中依次执行。 3. **处理权限问题**:如果遇到权限不足的问题,需要先授予相应的执行权限。 #### 六、注意事项 - **权限管理**:确保有足够的...

    一个项目的存储过程.sql

    标题和描述中提到的"一个项目的存储过程.sql"文件,很可能包含了该项目在数据库管理中使用的各种存储过程的定义。 存储过程的优势在于: 1. **性能优化**:由于存储过程在首次创建时被编译,之后的每次调用只需要...

    批量导数据 存储过程

    专门用于管理员到数据的存储过程,很好用

    SQL使用存储过程导入和导出Excel

    为了实现更为复杂的导出功能,可以编写一个存储过程来完成数据的导出工作。例如,下面的存储过程`p_exporttb`可以将表中的数据导出到真正的Excel文件中: ```sql create proc p_exporttb @tbname sysname, -- 要...

    mysql存储过程——用于数据库的备份与还原

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许程序员或数据库管理员预编译一系列SQL语句,形成一个可重用的程序单元。在本场景中,我们关注的是如何利用存储过程进行数据库的备份与还原,这在数据管理中至...

    单位写的11个优秀存储过程

    一个存储过程由一系列的SQL语句组成,包括SELECT、INSERT、UPDATE、DELETE等,以及控制流程语句(如IF-ELSE、WHILE、DECLARE等)。这些语句可以按照特定的逻辑顺序执行,使得处理复杂的业务规则变得更加容易。存储...

    PL/SQL存储过程实现导入文件的数据到数据库(针对导出存储过程)

    标题与描述概述的知识点是关于如何使用PL/SQL...通过以上解析,我们可以看到,PL/SQL存储过程为从文件导入数据到数据库提供了一个强大而灵活的解决方案,不仅提高了数据处理的效率,也增强了数据管理的可靠性和安全性。

    使用oracle存储过程将xml文件数据导入数据库

    2. 创建存储过程:接下来,编写一个存储过程来解析XML并插入数据。Oracle提供了DBMS_XMLGEN和XMLTYPE等包来处理XML数据。以下是一个基本示例: ```sql CREATE OR REPLACE PROCEDURE import_xml (p_xml CLOB) AS v_...

    mysql通过data文件夹恢复数据和存储过程的方法

    1. **数据一致性**:在进行物理恢复时,必须确保所使用的备份文件是在一个事务的一致性状态下生成的,否则可能会导致数据损坏。 2. **兼容性问题**:当使用不同版本的MySQL进行恢复时,需要注意版本之间的兼容性问题...

    oracle使用dblink高速复制表数据的动态存储过程

    执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...

    Java实现调用MySQL存储过程详解

    首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro_user`都是在`book`数据库中的存储过程。你可以使用MySQL命令行客户端或者可视化工具(如MySQL...

    SQL SERVER:把表里的数据导出成为INSERT INTO脚本的存储过程

    根据提供的文件信息,我们可以构建一个详细的SQL Server存储过程来实现将表中的数据转换为`INSERT INTO`脚本的功能。此存储过程将适用于多种数据类型,并能够动态生成插入语句,以便用户可以方便地导出数据作为脚本...

    JDBC创建触发器 JDBC存储过程 JDBC创建表 数据备份 java备份数据库/JAVA恢复数据、java导入sql脚本

    `MySqlUtil.java`可能包含与MySQL数据库交互的通用工具类,`MySqlJdbcTest.java`和`MySqlTest.java`则可能包含了具体的测试用例,比如创建触发器、执行存储过程、备份和恢复数据的代码实例。 总之,通过JDBC,Java...

    MySQL数据库存储过程

    MySQL数据库存储过程是数据库管理系统中一个非常重要的特性,它允许开发者编写一组预编译的SQL语句,以函数或过程的形式存储在数据库中,供后续调用。这极大地提高了数据库应用的性能和效率,因为存储过程只需要在...

    最新最全SQL2008存储过程解密

    SQL2008存储过程是数据库管理中一个关键的组件,它是一组预先定义并编译的SQL语句,用于执行特定的任务。在本教程中,“最新最全SQL2008存储过程解密”旨在帮助用户深入理解和掌握存储过程的各个方面,确保100%的...

Global site tag (gtag.js) - Google Analytics