【发布时间】:2015-07-10 11:44:46
【问题描述】:
我需要比较一个表中的两行来更新 lineB 中的字段,这些字段在 lineA 中填写。我的问题是,我需要比较的两个字段仅部分匹配。所以我不能只对 LIKE 比较执行更新语句。
我需要比较的字段包含生成的文件名。 该名称在表中存在两次,一次没有在开头附加“Bestand-”一词,一次没有此。 为了使用来自 lineA 的信息更新 lineB,我需要匹配这两个名称。
表格的示意图如下所示。
Id DateinameMarbilder PfadNeu
1 Bestand-one night
2 Bestand-two evening
3 Bestand-three morning
4 Bestand-four noon
5 one NULL
6 two NULL
7 three NULL
8 four NULL
这只是我需要阅读的两个字段,表格要大得多。
我试图通过使用游标和循环来实现这一点。 我得到了第四行的语法错误,我似乎无法解决。声明的值似乎有问题。 除此之外,我不太确定如何使第二个光标循环遍历所有行以找到匹配的字段,然后执行更新。不幸的是,表格没有组织,所以我不能只将下一行与前一行进行比较。
这是我尝试过的查询:
CREATE PROCEDURE curing()
BEGIN
DECLARE tester INT DEFAULT FALSE;
DECLARE name CHAR(50);
DECLARE tempColName CHAR(50);
DECLARE tempCol CHAR(30);
DECLARE schreiber_cursor1 CURSOR FOR
SELECT DateinameMarbilder FROM marbilder;
DECLARE schreiber_cursor2 CURSOR FOR
SELECT DateinameMarbilder FROM marbilder;
DECLARE update_cursor CURSOR FOR
SELECT PfadNeu FROM marbilder;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET tester = TRUE;
OPEN schreiber_cursor1;
OPEN schreiber_cursor2;
OPEN update_cursor;
get_name: LOOP
FETCH schreiber_cursor1 INTO name;
FETCH schreiber_cursor2 INTO TempColName;
FETCH update_cursor INTO tempcol;
IF tester THEN
LEAVE get_name;
IF name LIKE %TempColName THEN
UPDATE marbilder SET 'PfadNeu'=update_cursor ;
ELSE FETCH [[NEXT] FROM] schreiber_cursor2 INTO TempColName;
CLOSE schreiber_cursor;
CLOSE update_cursor;
END;
【问题讨论】: