当前位置: 首页 > 知识库问答 >
问题:

调用存储过程时出错:您正在使用安全更新

子车宏浚
2023-03-14

我试图调用一个存储过程,但我得到:错误代码:1175您正在使用安全更新模式,并且您试图更新一个没有使用键列的表

下面是表格:

CREATE TABLE `SystemSetting` (
  `SettingName` varchar(45) NOT NULL,
  `SettingValue` varchar(45) NOT NULL,
  `Deleted` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`SettingName`),
  KEY `PK_SystemSetting` (`SettingName`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

程序如下:

DELIMITER $$

CREATE PROCEDURE `SystemSettingCommit` (IN p_SettingName varchar(45), IN p_SettingValue varchar(45), OUT p_Status varchar(55)) 
BEGIN
SET p_Status = '00000';

IF (p_SettingValue IS NULL) OR (RTRIM(LTRIM(p_SettingValue)) = '') THEN
    SET p_Status = `StatusConcat`(p_Status, '10016');
END IF; 

IF (p_SettingName IS NULL) OR (RTRIM(LTRIM(p_SettingName)) = '') THEN
    SET p_Status = `StatusConcat`(p_Status, '10017');
END IF; 

IF (p_Status = '00000') THEN
    IF ((SELECT COUNT(`SettingName`) FROM `SystemSetting` WHERE (`SettingName` = p_SettingName)) > 0) THEN
        UPDATE `SystemSetting` SET `SettingValue` = p_SettingValue WHERE (`SettingName` = p_SettingName);
    ELSE
        INSERT INTO `SystemSetting` (`SettingName`, `SettingValue`) VALUES (p_SettingName, p_SettingValue);
    END IF;
END IF; 
END$$

DELIMITER;

我是这样称呼它的:

CALL `SystemSettingCommit` ('Setting1', 'Value1', @Status);

共有1个答案

鞠嘉誉
2023-03-14

试试这个:

SET SQL_SAFE_UPDATES=0;

或者在工作台中执行以下操作:

  • 去编辑--
 类似资料:
  • UPDATE IDConfig设置女性ID=女性ID 1; 获取错误,如您正在使用安全更新模式,并且您试图更新一个没有使用KEY列的WHERE的表要禁用安全模式,请在首选项中切换选项-

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • JavaScript执行错误:未捕获的referenceError:STPROC1中“var request=new XMLHttpRequest();”处未定义XMLHttpRequest位置22堆垛机:STPROC1线:3 我对JavaScript和Snowflake中的过程都相当陌生。所以,不知道问题是什么。我在这里使用基于参考的代码。

  • 我有一个在包中定义的存储过程。该过程接受两个参数,一个是游标: 我是这样调用这个过程的: 它将返回以下错误: 你好,阿尼尔班。

  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用:

  • 从1.r.58开始, 支持出参, 之前的版本仅支持入参. 从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现 仅含义入参的存储过程 // 建表,删除老的存储过程. dao.create(Pet.class, true); dao.insert(Pet.create("wendal")); dao.execute(Sqls.create("DROP PRO