拆分字符串程序找不到表

时间:2013-08-15 20:18:28

标签: mysql

我正试图让这个程序起作用,这让我很难过。我只是希望此过程使用CSV值表中的分隔值填充临时表。

DELIMITER $$

DROP PROCEDURE IF EXISTS String_Split $$

CREATE PROCEDURE String_Split
(
    vString VARCHAR(255),
    vSeparator VARCHAR(5)
)
BEGIN

DECLARE vDone tinyint(1) DEFAULT 1;
DECLARE vIndex INT DEFAULT 1;
DECLARE vSubString VARCHAR(15);

DROP TABLE IF EXISTS tmpValues;
CREATE TEMPORARY TABLE tmpValues (tmpVal VARCHAR(255));

WHILE vDone > 0 DO
    SET vSubString = SUBSTRING(vString, vIndex,
    IF(LOCATE(vSeparator, vString, vIndex) > 0,
        LOCATE(vSeparator, vString, vIndex) - vIndex,
        LENGTH(vString)
        ));
    IF LENGTH(vSubString) > 0 THEN
        SET vIndex = vIndex + LENGTH(vSubString) + 1;
        INSERT INTO tmpValues VALUES (vSubString);
    ELSE
        SET vDone = 0;
    END IF;
END WHILE;

END; $$

我打电话给它:

CALL String_Split(my_csv.keywords, ',');

我明白了:     错误代码:1109。字段列表中的未知表'my_csv'

我没有得到这个,因为表格在那里,并且选择了相应的数据库。

CREATE TABLE `my_csv` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`keywords` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 $$

INSERT INTO `my_csv` () VALUES
(1, 'featured, 3/8, Diamond, Engagement Ring, 14K, White Gold, Gold'),
(2, '1/3, Diamond, Engagement Ring, 14K, White Gold, Gold'),
(3, 'featured') $$

1 个答案:

答案 0 :(得分:0)

您需要先获取值,然后调用该过程,而不是在调用函数中调用表名和字段。这是一个有效的example

SELECT @keyword :=keywords from my_csv;
CALL String_Split(@keyword, ',');

修改 那只抓住了最后一排。这个one会选择所有这些。另外,执行此操作时,过程中的vSeparator变量太小,因此我将其提高到255.

SELECT @keyword :=group_concat(keywords) FROM my_csv;
CALL String_Split(@keyword, ',');
select * from tmpValues;