Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么数据没有存储在OUTHOL表中,因为这是一个简单的MySQL存储过程,merge语句具有update、insert和delete功能?_Mysql_Sql_Database_Stored Procedures - Fatal编程技术网

为什么数据没有存储在OUTHOL表中,因为这是一个简单的MySQL存储过程,merge语句具有update、insert和delete功能?

为什么数据没有存储在OUTHOL表中,因为这是一个简单的MySQL存储过程,merge语句具有update、insert和delete功能?,mysql,sql,database,stored-procedures,Mysql,Sql,Database,Stored Procedures,我正在运行一个包含update、insert和delete语句的存储过程,并将目标表和源表中的更改存储到mysql中的outhol表中,但数据没有存储在outhol表中。为什么呢 由于此存储过程在没有任何异常的情况下获得成功,但最后的outhol选项卡为空 @delimiter %%%; CREATE PROCEDURE `QBIWeb`.`Attributes_ProductAttribute_data_Test`() SQL SECURITY INVOKER BEGIN

我正在运行一个包含update、insert和delete语句的存储过程,并将目标表和源表中的更改存储到mysql中的outhol表中,但数据没有存储在outhol表中。为什么呢

由于此存储过程在没有任何异常的情况下获得成功,但最后的outhol选项卡为空

@delimiter %%%;
CREATE PROCEDURE `QBIWeb`.`Attributes_ProductAttribute_data_Test`()   
    SQL SECURITY INVOKER    
BEGIN

DROP TEMPORARY TABLE IF EXISTS outhol;
CREATE TEMPORARY TABLE outhol(outputnote varchar(2000));

DROP TEMPORARY TABLE IF EXISTS SourceValues;
CREATE TEMPORARY TABLE SourceValues ( ProductAttributeId INT
                        , TypeOfSystemId INT
                        , TypeOfProfitCenterCode INT
                        , TypeOfProgramLineCode VARCHAR(2)
                        , TypeOfProductLineCode INT
                        , TypeOfAttributeCode VARCHAR(25)
                        , ValueBit TINYINT
                        , ValueInt INT
                        , ValueText LONGTEXT
                        , ValueDecimal DECIMAL(28,2)
                        , ValueDateTime DATETIME);

INSERT INTO SourceValues VALUES
                    (1, null, null, null, 32, 'MULTIPLE_QUOTE', 0, null, null, null, null)
                    , (2, null, null, null, 34, 'MULTIPLE_QUOTE', 0, null, null, null, null) 
                  , (3, null, null, null, 70, 'MULTIPLE_QUOTE', 0, null, null, null, null); 
                                

DROP TEMPORARY TABLE IF EXISTS Attributes_ProductAttribute_dataTest;
CREATE TEMPORARY TABLE Attributes_ProductAttribute_dataTest (ProductAttributeId INT
                        , TypeOfSystemId INT
                        , TypeOfProfitCenterCode INT
                        , TypeOfProgramLineCode VARCHAR(2)
                        , TypeOfProductLineCode INT
                        , TypeOfAttributeCode VARCHAR(25)
                        , ValueBit TINYINT
                        , ValueInt INT
                        , ValueText LONGTEXT
                        , ValueDecimal DECIMAL(28,2)
                        , ValueDateTime DATETIME);

INSERT INTO  Attributes_ProductAttribute_dataTest VALUES

(4, null, null, null, 71, 'MULTIPLE_QUOTE', 0, null, null, null, null)
 , (3, null, null, null, 34, 'MULTIPLE_QUOTE', 0, null, null, null, null) 
  , (6, null, null, null, 73, 'MULTIPLE_QUOTE', 0, null, null, null, null);


BEGIN
/*DECLARE @var_done INT DEFAULT FALSE;*/

DECLARE var_ProductAttributeId INT;
DECLARE var_TypeOfSystemId INT;
DECLARE var_TypeOfProfitCenterCode INT;
DECLARE var_TypeOfProgramLineCode VARCHAR(2);
DECLARE var_TypeOfProductLineCode INT;
DECLARE var_TypeOfAttributeCode VARCHAR(25);
DECLARE var_ValueBit TINYINT;
DECLARE var_ValueInt INT;
DECLARE var_ValueText LONGTEXT;
DECLARE var_ValueDecimal DECIMAL(28,2);
DECLARE var_ValueDateTime DATETIME;




                                
DECLARE cursor_source CURSOR FOR SELECT  ProductAttributeId
                        , TypeOfSystemId
                        , TypeOfProfitCenterCode
                        , TypeOfProgramLineCode
                        , TypeOfProductLineCode
                        , TypeOfAttributeCode
                        , ValueBit
                        , ValueInt
                        , ValueText
                        , ValueDecimal
                        , ValueDateTime
                                FROM SourceValues;
                                
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @var_done = TRUE;
                                                              
OPEN cursor_source;

read_loop: LOOP
FETCH cursor_source INTO var_ProductAttributeId ,
var_TypeOfSystemId ,
var_TypeOfProfitCenterCode ,
var_TypeOfProgramLineCode ,
var_TypeOfProductLineCode ,
var_TypeOfAttributeCode ,
var_ValueBit ,
var_ValueInt ,
var_ValueText ,
var_ValueDecimal ,
var_ValueDateTime;




/*  execute statements START*/

IF @var_done THEN
      LEAVE read_loop;
    END IF;
IF NOT @var_done THEN 
IF EXISTS(SELECT * FROM  Attributes_ProductAttribute_dataTest AD WHERE AD.ProductAttributeId=var_ProductAttributeId AND

IFNULL(var_TypeOfSystemId, 0) <> IFNULL(TypeOfSystemId, 0) or
                     IFNULL(var_TypeOfProfitCenterCode, 0) <> IFNULL(AD.TypeOfProfitCenterCode, 0) or
                     IFNULL(var_TypeOfProgramLineCode,0) <> IFNULL(AD.TypeOfProgramLineCode,0)  or
                     IFNULL(var_TypeOfProductLineCode, 0) <> IFNULL(AD.TypeOfProductLineCode, 0) or
                     IFNULL(var_TypeOfAttributeCode,0) <> IFNULL(AD.TypeOfAttributeCode,0) or
                     IFNULL(var_ValueBit, 0) <> IFNULL(AD.ValueBit, 0) or
                     IFNULL(var_ValueInt, 0) <> IFNULL(AD.ValueInt, 0) or
                     IFNULL(var_ValueText,0) <> IFNULL(AD.ValueText,0) or
                     IFNULL(var_ValueDecimal, 0) <> IFNULL(AD.ValueDecimal, 0) or
                      IFNULL(var_ValueDateTime, 0) <> IFNULL(AD.ValueDateTime, 0)

                     )



THEN
        UPDATE  Attributes_ProductAttribute_dataTest SET 
                          TypeOfSystemId = var_TypeOfSystemId
                          , TypeOfProfitCenterCode = var_TypeOfProfitCenterCode
                          , TypeOfProgramLineCode = var_TypeOfProgramLineCode
                          , TypeOfProductLineCode = var_TypeOfProductLineCode
                          , TypeOfAttributeCode = var_TypeOfAttributeCode
                          , ValueBit = var_ValueBit
                          , ValueInt = var_ValueInt
                          , ValueText = var_ValueText
                          , ValueDecimal = var_ValueDecimal
                          , ValueDateTime = var_ValueDateTime
         WHERE ProductAttributeId = var_ProductAttributeId;





           /* ----Logging the resutls ---*/
           INSERT INTO outhol VALUES (CONCAT('UPDATED: ', 'ProductAttributeId = ' , ifnull(cast(var_ProductAttributeId  as char), 'null')));                           
                                                    
  ELSEIF NOT EXISTS(SELECT * FROM  Attributes_ProductAttribute_dataTest AD WHERE AD.ProductAttributeId  = var_ProductAttributeId ) THEN
       INSERT INTO   Attributes_ProductAttribute_dataTest VALUES (var_ProductAttributeId ,
var_TypeOfSystemId ,
var_TypeOfProfitCenterCode ,
var_TypeOfProgramLineCode ,
var_TypeOfProductLineCode ,
var_TypeOfAttributeCode ,
var_ValueBit ,
var_ValueInt ,
var_ValueText ,
var_ValueDecimal ,
var_ValueDateTime
);    

             
                /* ----Logging the resutls ---*/
       INSERT INTO outhol VALUES (CONCAT('INSERTED: ', 'ProductAttributeId= ' , ifnull(cast(var_ProductAttributeId as char), 'null'))) ;                                              
  END IF;  
END IF;
END LOOP;

/*  execute statements END*/

CLOSE cursor_source;

BEGIN
/*  Deleting Records not n Source */
DECLARE cursor_trg CURSOR FOR SELECT ProductAttributeId FROM  Attributes_ProductAttribute_dataTest ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @var_done = TRUE;

OPEN cursor_trg;

read_loop: LOOP
FETCH cursor_trg INTO  var_ProductAttributeId;

/*  execute statements START*/

IF @var_done THEN
      LEAVE read_loop;
    END IF;
IF NOT @var_done THEN
        IF NOT EXISTS(SELECT * FROM SourceValues SV WHERE SV.ProductAttributeId = var_ProductAttributeId) THEN
           DELETE FROM Attributes_ProductAttribute_dataTest  WHERE ProductAttributeId = var_ProductAttributeId;
                       /* ----Logging the resutls ---*/
           INSERT INTO outhol VALUES (CONCAT('DELETED: ', 'ProductAttributeId = ' , ifnull(cast(var_ProductAttributeId as char), 'null')) );     
        END IF;
END IF;
END LOOP;
/*  execute statements END*/

CLOSE cursor_trg;

SELECT * FROM SourceValues;
SELECT * FROM  Attributes_ProductAttribute_dataTest ;
SELECT * FROM outhol;

END;
END;
END;```
@分隔符%%;
创建过程`QBIWeb`.`Attributes\u ProductAttribute\u data\u Test`()
SQL安全调用程序
开始
删除临时表(如果存在);
创建临时表outhol(outputnotevarchar(2000));
如果存在源值,则删除临时表;
创建临时表SourceValues(ProductAttributeId INT
,TypeOfSystemId INT
,TypeOfProfitCenterCode INT
,程序代码VARCHAR的类型(2)
,TypeOfProductLineCode INT
,属性代码VARCHAR的类型(25)
,ValueBit TINYINT
,ValueInt
,ValueText LONGTEXT
,值十进制(28,2)
,ValueDateTime(日期时间);
插入到SourceValues值中
(1,null,null,null,32,'多引号',0,null,null,null,null,null)
,(2,null,null,null,34,'多引号',0,null,null,null,null,null)
,(3,null,null,null,70,'多引号',0,null,null,null,null,null);
如果存在属性\产品属性\数据测试,则删除临时表;
创建临时表属性\u ProductAttribute\u dataTest(ProductAttributeId INT
,TypeOfSystemId INT
,TypeOfProfitCenterCode INT
,程序代码VARCHAR的类型(2)
,TypeOfProductLineCode INT
,属性代码VARCHAR的类型(25)
,ValueBit TINYINT
,ValueInt
,ValueText LONGTEXT
,值十进制(28,2)
,ValueDateTime(日期时间);
插入属性\产品属性\数据测试值
(4,null,null,null,71,'多引号',0,null,null,null,null,null)
,(3,null,null,null,34,'多引号',0,null,null,null,null,null)
,(6,null,null,null,73,'多引号',0,null,null,null,null,null);
开始
/*声明@var_done INT DEFAULT FALSE*/
声明var_ProductAttributeId INT;
声明var_TypeOfSystemId INT;
声明var_TypeOfProfitCenterCode INT;
声明var_类型的程序代码VARCHAR(2);
声明productlinecode INT的var_类型;
声明var_类型属性代码VARCHAR(25);
声明var_ValueBit TINYINT;
声明var_ValueInt;
声明var_ValueText LONGTEXT;
声明var_值十进制(28,2);
声明var_ValueDateTime DATETIME;
声明游标\选择ProductAttributeId的源游标
,系统的类型
,TypeOfProfitCenterCode
,TypeOfProgramLineCode
,产品线代码的类型
,属性代码的类型
,ValueBit
,ValueInt
,ValueText
,ValueDecimal
,ValueDateTime
源值;
声明未找到集合的继续处理程序@var_done=TRUE;
开源;
读循环:循环
将游标\u源提取到var\u ProductAttributeId中,
var_类型的系统,
var_ProfitCenter代码的类型,
var_类型的程序代码,
var_ProductlineCode的类型,
变量类型属性代码,
var_ValueBit,
var_ValueInt,
var_ValueText,
var_ValueDecimal,
var_ValueDateTime;
/*执行语句开始*/
如果@var_完成了,那么
离开read_循环;
如果结束;
如果没有@var_完成,则
如果存在(从属性\u ProductAttribute\u数据测试AD中选择*其中AD.ProductAttributeId=var\u ProductAttributeId和
IFNULL(var_TypeOfSystemId,0)IFNULL(TypeOfSystemId,0)或
IFNULL(var_typeOfProfitCenter代码,0)IFNULL(AD.typeOfProfitCenter代码,0)或
IFNULL(var_TypeOfProgramLineCode,0)IFNULL(AD.TypeOfProgramLineCode,0)或
IFNULL(var_TypeOfProductLineCode,0)IFNULL(AD.TypeOfProductLineCode,0)或
IFNULL(var_TypeOfAttributeCode,0)IFNULL(AD.TypeOfAttributeCode,0)或
IFNULL(var_ValueBit,0)IFNULL(AD.ValueBit,0)或
IFNULL(var_ValueInt,0)IFNULL(AD.ValueInt,0)或
IFNULL(var_ValueText,0)IFNULL(AD.ValueText,0)或
IFNULL(var_ValueDecimal,0)IFNULL(AD.ValueDecimal,0)或
IFNULL(var_ValueDateTime,0)IFNULL(AD.ValueDateTime,0)
)
然后
更新属性\u产品属性\u数据测试集
TypeOfSystemId=var_TypeOfSystemId
,TypeOfProfitCenterCode=var_TypeOfProfitCenterCode
,typeofprogralinecode=var\u typeofprogralinecode
,TypeOfProductLineCode=var\u TypeOfProductLineCode
,TypeOfAttributeCode=var\u TypeOfAttributeCode
,ValueBit=var\u ValueBit
,ValueInt=var\u ValueInt
,ValueText=var\u ValueText
,ValueDecimal=var\u ValueDecimal
,ValueDateTime=var\u ValueDateTime
其中ProductAttributeId=var_ProductAttributeId;
/*----记录结果---*/
插入outhol值(CONCAT('UPDATED:','Pr