- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在使用以下代码,但我无法找到哪里出错了。我一直在运行以下代码,它在 sql 语法中说错误。请帮助我,我是 mysql 和存储过程的新手。我收到的错误是:错误代码 1064,您有 sql 语法错误。
CREATE DEFINER=`PotatoHead`@`%` PROCEDURE `InsertIntoTable`(in
tablename varchar(45),in ID varchar(45),in Project
varchar(45),in Variant varchar(45)
in ReleaseVersion varchar(45) ,
in TestBenchID varchar(45) ,
in TestCaseID int(11) ,
in TestCaseNamespace varchar(100) ,
in TestCaseName varchar(45),
in TestCaseDomain varchar(45) ,
in TestType varchar(45) ,
in HardwareVersion varchar(4000) ,
in SoftwareVersion varchar(4000),
in Result varchar(45) ,
in Comment varchar(4000),
in Duration varchar(45) ,
in StartTime varchar(45) ,
in EndTime varchar(45) )
BEGIN
SET @sql = CONCAT('Insert into ', tablename ,' (ID,Project,Variant,
ReleaseVersion,
TestBenchID ,
TestCaseID ,
TestCaseNamespace ,
TestCaseName ,
TestCaseDomain ,
TestType ,
HardwareVersion ,
SoftwareVersion ,
Result ,
Comment ,
Duration ,
StartTime ,
EndTime) VALUES (');
SET @sql = CONCAT(ID,',',Project,',',Variant,',',
ReleaseVersion,',',
TestBenchID,',',
TestCaseID,',',
TestCaseNamespace ,',',
TestCaseName ,',',
TestCaseDomain ,',',
TestType ,',',
HardwareVersion ,',',
SoftwareVersion ,',',
Result ,',',
Comment ,',',
Duration ,',',
StartTime ,',',
EndTime,');');
PREPARE s FROM @sql;
EXECUTE s;
DEALLOCATE PREPARE s;
END
最佳答案
您有一个小错字,输入参数列表中缺少一个逗号
in Variant varchar(45)
^^^^
这是我在工作台中运行您的代码时收到的完整错误消息
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'in ReleaseVersion varchar(45) , in TestBenchID varchar(45) , ' at line 6
您删除了错误消息的一部分,该消息会告诉您在哪里查找错误,该错误将在引用的代码之前。
此外,如果您还没有这样做,则需要在多语句过程定义之前和之后重置 DELIMITER,以便 MySQL 知道将整个定义视为一个。
例如
DELIMITER //
CREATE DEFINER=`PotatoHead`@`%` PROCEDURE `InsertIntoTable`()
BEGIN
Your proc definition
END
//
DELIMITER ;
更新
最后的更改应该已编译,因此现在我们遇到运行时错误。我承认我没有关注原始代码中的第一个错误,因此没有注意到其他一些问题。例如
让我们按顺序排列:
您将 INSERT 语句的第一部分分配给 @sql。没关系。稍后将 VALUES 列表分配给同一个变量。此时,您将替换原来的部分,而不是将两个部分连接起来。这导致了您发布的第二个错误。你可以用
来修复它SET @sql = CONCAT(@sql,' VALUES(' etc.
CONCAT 语句将为您留下一个字符串,其中包含 VARCHAR 列的 16 个不带引号的变量。您需要在所有这些值周围包含单引号,否则 PREPARE 语句将失败。你可以用
来修复这个问题SET @sql = CONCAT(@sql, '\'',
ID,'\',\'',
Project,'\',\'',
Variant,'\',\'',
ReleaseVersion,'\',\'',
TestBenchID,'\',\'',
TestCaseID,',',
TestCaseNamespace ,'\',\'',
等等。
CONCAT 现在变得有点困惑,我想你会同意的。
接下来的问题是对参数和表中的列名称使用相同的名称。正如我之前提到的,在这种情况下你会侥幸逃脱,但是当 MySQL 确定使用哪个参数时,它会优先考虑参数名称而不是列名称,这在 SELECT、WHERE 子句中使用参数时可能会导致问题,等等。最好区分两者以避免混淆。因此,我还会重命名您的所有参数。例如
CREATE PROCEDURE `InsertIntoTable` (
in _tablename varchar(45),
in _ID varchar(45),
in _Project varchar(45),
in _Variant varchar(45),
in _ReleaseVersion varchar(45) ,
然后相应地更新 VALUES 列表。顺便说一句,由于所有输入参数都是 IN 参数,并且这是默认设置,因此您可以省去每个参数前面的 'in' 并节省一些打字时间。
最后,您对动态 SQL 的使用。我怀疑此过程正在写入表的所有列,并且只有一个表具有此精确定义。如果表名不会更改,为什么需要能够在运行时更改它?如果情况并非如此,那么您使用多个表来存储完全相同的数据的原因是什么?如果我的怀疑是正确的,那么您可以完全放弃使用动态 SQL,过程将变得更加简单
例如
CREATE PROCEDURE `InsertIntoYrTablename` (
_ID varchar(45),
_Project varchar(45),
_Variant varchar(45),
_ReleaseVersion varchar(45),
_TestBenchID varchar(45),
_TestCaseID int(11),
_TestCaseNamespace varchar(100),
_TestCaseName varchar(45),
_TestCaseDomain varchar(45),
_TestType varchar(45),
_HardwareVersion varchar(4000),
_SoftwareVersion varchar(4000),
_Result varchar(45),
_Comment varchar(4000),
_Duration varchar(45),
_StartTime varchar(45),
_EndTime varchar(45))
INSERT into `yrtablename` (
ID,
Project,
Variant,
ReleaseVersion,
TestBenchID,
TestCaseID,
TestCaseNamespace,
TestCaseName,
TestCaseDomain,
TestType,
HardwareVersion,
SoftwareVersion,
Result,
Comment,
Duration,
StartTime,
EndTime
) VALUES (
_ID,
_Project,
_Variant,
_ReleaseVersion,
_TestBenchID,
_TestCaseID,
_TestCaseNamespace,
_TestCaseName,
_TestCaseDomain,
_TestType,
_HardwareVersion,
_SoftwareVersion,
_Result,
_Comment,
_Duration,
_StartTime,
_EndTime);
这更容易阅读和维护,并且无需麻烦的字符串操作即可完成工作。 MySQL 将负责为您引用参数,并且由于它现在是单个语句,因此无需使用 BEGIN ... END block 并重置 DELIMITER。
关于mysql - 将数据输入到数据和表名是动态的表中的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50549244/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!