MySQL 将表名传递给游标选择

2023-12-11

我希望程序接受参数答案表 and partid在选择语句中, 但是当我调用它时,它不会用值替换参数answertable

电话call updateTotalScores('quiz_participation', 'quiz_answer', 1)

返回错误:1146 - Table 'quizdb.answertable' doesn't exist

传递 id 有效,但传递表名无效 那么我如何将表名传递给 select in

DECLARE cur1 CURSOR FOR SELECT SUM(`score`), SUM(`maxscore`) FROM answertable WHERE `idParticipation`=partid;

整个过程:

DELIMITER $$
CREATE PROCEDURE updateTotalScores(IN participationtable CHAR(64), IN answertable CHAR(64), IN partid INT)
BEGIN
 DECLARE done INTEGER DEFAULT 0;
 DECLARE sscore INTEGER DEFAULT 0;
 DECLARE smaxscore INTEGER DEFAULT 0;
 DECLARE cur1 CURSOR FOR SELECT SUM(`score`), SUM(`maxscore`) FROM answertable WHERE `idParticipation`=partid;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

 OPEN cur1;
 REPEAT
  FETCH cur1 INTO sscore, smaxscore;
  UNTIL done = 1
 END REPEAT;
 CLOSE cur1;

 UPDATE participationtable SET `score`=sscore, `maxscore`=smaxscore WHERE `idParticipation`=partid;
END $$
DELIMITER ;

为了完整性

表名无法传递给 MySql 游标,至少目前还不能

http://forge.mysql.com/worklog/task.php?id=3433

答案来自下面(修正了一点)

DELIMITER $$

CREATE PROCEDURE updateTotalScores(IN participation_table VARCHAR(45), IN answer_table VARCHAR(45), IN part_id INT)
BEGIN
    SET @stmt_text=CONCAT("SELECT @score := SUM(`score`), @maxscore := SUM(`maxscore`) FROM ",
                         answer_table, " WHERE `idParticipation`=",  part_id);
    PREPARE stmt FROM @stmt_text;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

    SET @stmt_text=CONCAT("UPDATE ", participation_table, 
                        " SET `score`=?, `maxscore`=? WHERE `idParticipation`=", part_id);
    PREPARE stmt FROM @stmt_text;
    EXECUTE stmt USING @score, @maxscore;
    DEALLOCATE PREPARE stmt;
END $$

我相信你不能以这种方式做到这一点。

为了实现这一点,您应该使用动态 SQL。

请注意,您也无法使用动态 SQL 打开游标。但就你而言,似乎不需要光标。

如果我正确理解你的代码,你可以只使用用户变量,并可能使用 2 个动态准备的语句来实现你想要做的事情。

  SET @stmt_text=CONCAT("SELECT @score = SUM(`score`), @maxscore=SUM(`maxscore`) FROM ",                
                         answertable, "WHERE `idParticipation`= ",  partid);
  PREPARE stmt FROM @stmt_text;
  EXECUTE stmt USING @a;

然后使用以下语句更新值

  SET @stmt_text=CONCAT("UPDATE", participationtable, " SET `score`=@score,  
                      `maxscore`=@maxscore WHERE `idParticipation`=", partid);

  PREPARE stmt FROM @stmt_text;
  EXECUTE stmt USING @a;

  DEALLOCATE PREPARE stmt;

注意:请检查语法。我无法测试它来准确验证它,但我希望你明白。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 将表名传递给游标选择 的相关文章

  • SQL。 SP 或函数应计算周五的下一个日期

    我需要编写一个存储过程来返回给定日期的下周五日期 例如 如果日期是 05 12 2011 那么它应该返回下周五日期 05 13 2011 如果您通过 05 16 2011 那么它应该返回日期是 5 20 2011 星期五 如果您将星期五作为
  • 访问数据库 LIMIT 关键字

    我试图让我的页面列表功能在 ASP 中与 Access 数据库一起工作 但我不知道 Microsoft SQL 中 LIMIT 的替代方案 我已经尝试过 TOP 但这似乎不起作用 这是 MySQL 中使用的语句 SELECT FROM cu
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应
  • Entity Framework 6 多对多想要插入重复行

    不应该这么难 我准备放弃EF了 我的模型有周刊版本 每个版本可以有许多分类广告 每个分类可以出现在一个或多个版本中 我的模型 public class Classifieds Key DatabaseGenerated DatabaseGe
  • 如何授予 SQL Server 代理访问权限以便能够写入/修改系统文件?

    我的工作有一个存储过程 运行 BCP 来查询一些数据 如果我单独运行 QUERYOUT 命令 它就会起作用 但是 如果我尝试在作业中运行它 它会创建文件但 挂起 并且数据永远不会放入文件中 这会永远挂起 所以我通常终止 BCP exe 我的
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf
  • 无法访问 Big Query 中类型为 ARRAY> 的字段

    我正在尝试在 BigQuery 上使用标准 SQL 方言 即不是旧版 SQL 运行查询 我的查询是 SELECT date hits referer FROM refresh ga sessions xxxxxx LIMIT 1000 但不
  • FireDac 添加下划线 1 以区分具有相同名称的 2 个列名

    我有一个连接 2 个表的选择 因此这些表中存在具有相似名称的列 因此现在在检索结果时 FireDac 将下划线 1 添加到第二个列名称以区分这两个表 Select from Table1 inner join Table2 on Table
  • 使用 MySQL 的 CURDATE() 或 PHP 的 date() 更快?

    使用mysql查询是不是更快 SELECT CURDATE as today 或 PHP 语句 curdate date Y m d 同样的答案是否适用于使用date VS MySQL 的NOW and CURTIME 如果您只是执行查询以
  • 将逗号分隔的主数据替换为列中的描述

    有 2 个 SQL Server 表 Products Name Status Code Product 1 1001 1003 Product 2 1001 1005 1006 Status Code Description 1001 S
  • 从 SQL 数据库获取日期时间

    我的数据库表中有一个 DateTime 记录 我编写一个查询从数据库中获取它 string command2 select Last Modified from Company Data where Company Name Descrip
  • 错误代码:1062。重复条目“PRIMARY”

    因此 我的教授给了我表格将其插入数据库 但是当我执行他的代码时 MySQL 不断给出错误代码 1062 这是冲突表和插入 TABLES CREATE TABLE FABRICANTES COD FABRICANTE integer NOT
  • 处理大数据表时应该如何使用Hibernate Mapping

    问题定义 我有一个包含大量数据 超过 100 000 行 的数据库表 表结构如下 AppID DocID DocStatus 1 100 0 1 101 1 2 200 0 2 300 1 每个 applicationID 可能有数千个文档
  • MySQL InnoDB引擎是否对只读事务运行任何性能优化

    根据参考文档 只读事务标志可能会提示存储引擎运行一些优化 设置会话事务只读 如果事务访问模式设置为 READ ONLY 则对表进行更改 被禁止 这可能使存储引擎能够提高性能 不允许写入时可能进行的改进 InnoDB引擎是否对只读事务运行这样
  • 如何在php/mysql中使用事务

    我正在使用 php mysql 我知道 mysql 中的事务 但不能在我的脚本中使用 下面是我的脚本 如何在我的代码中使用 php 事务 即 BEGIN ROLLBACK COMMIT foreach json a shop as json
  • PostgreSQL 窗口函数:row_number() over(按 col2 分区 col 顺序)

    以下结果集源自具有一些连接和联合的 SQL 查询 SQL 查询已经对 Date 和 game 上的行进行了分组 我需要一列来描述按日期列分区的游戏的尝试次数 Username Game ID Date johndoe1 Game 1 100
  • 使用 FileTable 通过 SQL INSERT 创建子目录

    之前 我请求如何在一个目录中创建一个目录FileTable不使用文件 I O API https stackoverflow com q 10483906 175679 我现在想为刚刚创建的父目录创建一个子目录 在插入期间如何分配我的父母
  • 使用 Laravel 和 Eloquent 从表中选择全部

    我正在使用 Laravel 4 设置我的第一个模型 以从名为的表中提取所有行posts 在标准 MySQL 中我会使用 SELECT FROM posts 如何在 Laravel 4 模型中实现这一目标 我的完整模型源代码如下
  • MySQL - 查找接近的匹配项

    MySQL 有没有办法在文本字段中找到紧密匹配的内容 说找到 email protected cdn cgi l email protection当搜索时 email protected cdn cgi l email protection
  • 火鸟删除速度很慢

    我正在做这个简单的交易 DELETE FROM ominve01 WHERE CVE OBS IN SELECT CVE OBS FROM minve01 M WHERE M FECHA DOCU lt 31 12 2010 OR FECH

随机推荐

  • PostgreSQL 中的 DATE ADD 函数

    目前 我在 Microsoft SQL Server 中有以下代码来获取连续两天查看的用户 WITH uservideoviewvideo date user id AS SELECT DISTINCT date user id FROM
  • 嵌套大括号和指定的初始化器

    为什么我需要嵌套大括号来编译此代码 include
  • 实现 AbstractMultiTenantConnectionProvider

    我正在尝试使用休眠多租户 来自第16章 现在我的扩展存储管理器使用此方法启动多租户会话 public Session getClabSession int serverId String customerSchema if clabFact
  • 在 iOS 5 中为基于页面的应用程序加载背景图像的正确方法?

    我正在开发适用于 iOS 5 的 iBooks 类型的应用程序 除了背景图像之外 一切都正常 特别是在横向模式下 到目前为止我一直在使用 UIImageView background UIImageView alloc initWithIm
  • HTML JQUERY 实现 UL/LI 上的向下箭头

    这是一个简单的要求 我无法使其工作 我只是想使用箭头键进行导航 此外 我想检测何时在 LI 上按下箭头键 但是我无法使用箭头进行导航 我的 keydown 事件也不会触发
  • $_GET URL重写

    嘿大家 希望我能正确解释这一点 我有一些 URL 我想通过 URL 重写来整理它们 例如 我有 domain com index php page 1 domain com index php page 2 domain com index
  • 是否允许将应用程序侧面加载到 Windows RT 设备上?

    是否可以将 Windows 8 应用程序 WinRT 旁加载到 Windows RT 设备 例如新的 Microsoft Surface RT 上 例如 如果我有一个内部业务线应用程序 我可以向我的主管人员提供 Microsoft Surf
  • UCS2/HexEncoded 字符

    任何人都可以帮助我吗 我怎样才能获得 UCS2 HexEncoded 字符 像 Hello 将返回 00480065006C006C006F 这是十六进制编码值 第0048章 第0065章 006C l 006C l 006F o 同样在阿
  • 如何使用离散和连续特征混合中的互信息来选择KBest?

    我正在使用 scikit learn 来训练分类模型 我的训练数据中既有离散特征又有连续特征 我想使用最大互信息进行特征选择 如果我有向量x和标签y前三个特征值是离散的 我可以得到 MMI 值 如下所示 mutual info classi
  • 在EntityFramework中使用SqlQuery来组成真正的IQueryable

    有没有办法让 SqlQuery 或任何其他 sql 执行方法组成模型对象并允许 Include 等方法工作 我正在这样做 其中 view products 是一个 SQL 表函数 var p context SqlQuery
  • 指向作为静态成员的成员变量的指针

    这些天我正在摆弄一个数据模型的项目研究 该模型具有适合我的需求的反射 当我使用最新稳定版本的 g 进行第一项研究时 我在 Visual Studio 19 中失败了 太糟糕了 因为后者是我的主要平台 实际上 我尝试将指向成员变量的指针存储到
  • 图像的可点击区域 - 即使屏幕改变尺寸 html

    我正在尝试学习如何用 HTML 制作一个简单的网站 目前我已经创建了一个背景图像 该图像上有多个形状 我希望图像的不同部分成为可点击的链接 我了解如何查找坐标并使用图像映射 但是当我更改屏幕尺寸时 可单击的链接不起作用 如何使可点击区域适用
  • 从维基百科的某个部分中抓取表格

    我正在尝试想出一种可靠的方法来获取每个赛季 NFL 球队的最终排名 奇妙的是 有维基百科页面包含所有这些信息的链接 不幸的是 最终排名表的存储方式 位置存在很多不一致之处 考虑到联赛结构的演变 这也许是预料之中的 拯救恩典should相关表
  • `:_*`(冒号下划线星号)在 Scala 中做什么?

    我有以下一段代码这个问题 def addChild n Node newChild Node n match case Elem prefix label attribs scope child gt Elem prefix label a
  • Java swing gui 和 lwjgl

    一个简单的问题 是否可以在同一窗口中查看 java Swing 库的 gui 和 lwjgl 3D 场景 而无需使用任何其他 gui 库 如何 您可以使用 Display setParent java awt Canvas 方法将 LWJG
  • TOwnedCollection 和使用多个继承的 TCollectionItem

    我在添加自己的内容时遇到问题TCollectionItem类 继承自TCollectionItem 在同一个范围内TOwnedCollection 我提到了印地IdMessageParts pas for TIdMessagePart按照建
  • Cordova 6.0.0 更新后不断丢失存储空间

    我已经使用 Cordova cli 几年了 今天我从 Cordova 5 4 0 更新到 6 0 0 npm install g cordova latest 然后我将android平台从以前的版本更新到5 1 0 cordova plat
  • 使用 JComboBox(类别) 更改/更新 JTable 内容

    我的 JTable 有问题 我的 JTable 显示数据库的内容 一个数据库表具有名称类别 每个类别都显示在 JComboBox 中 如果我单击一个类别 它应该更新表格内容 这是我为您编写的一小段代码 因此可以更轻松地帮助我 代码应该可以运
  • JsonXContentGenerator 的 Elasticsearch 2.0 NoClassDefFoundError

    我正在尝试将我的elasticsearch java客户端api版本从1 4 2更新到2 0 0 我正在使用 java 1 8 我使用以下代码 XContentBuilder builder XContentFactory jsonBuil
  • MySQL 将表名传递给游标选择

    我希望程序接受参数答案表 and partid在选择语句中 但是当我调用它时 它不会用值替换参数answertable 电话call updateTotalScores quiz participation quiz answer 1 返回