1

MySQL にストアド関数があり、部分的に機能します。

DELIMITER $$
DROP FUNCTION IF EXISTS `getsubdomain`$$
CREATE FUNCTION getsubdomain(page_id int(11))
RETURNS CHAR(255)
DETERMINISTIC
READS SQL DATA
SQL SECURITY INVOKER
BEGIN
declare current_p_id int(11);
declare current_p_parent_id int(11);
declare current_p_address_type char(255);
declare current_p_adress char(255);
SET current_p_id = page_id;
WHILE (current_p_id) <> 0
DO
select p_parent_id, p_address_type, p_adress from opu_pages where p_id = current_p_id into current_p_parent_id, current_p_address_type, current_p_adress;
IF current_p_address_type <> ''
THEN
IF current_p_address_type = 'subdomain'
THEN
RETURN current_p_adress;
ELSE
SET current_p_id = current_p_parent_id;
END IF;
ELSE
RETURN NULL;
END IF;
END WHILE;
RETURN NULL;
END$$
DELIMITER ;

クエリを呼び出すと、問題SELECT getsubdomain(p_id) FROM opu_pages;なく動作します。しかし、データベースでそれを呼び出すと、SELECT * FROM opu_pages WHERE getsubdomain(p_id)='library';折りたたまれてフリーズします。クエリと関数は 1 つのテーブルで動作します。私は何を間違えましたか?テーブル形式のMyISAMが原因ではないかと思いました。しかし、このテーブルで FULLTEXTFORMAT フィールドを使用しているため、InnoDB に変更できません。

テーブルopu_pages(MyISAM) スキーム

p_id INT
p_parent_id INT
p_address_type ENUM (path, subdomain)
p_adress VARCHAR
4

1 に答える 1

0

あなたの投稿に基づいて、あなたのコードはいくつかの入力パラメーターに対して無限ループに入っていると言えます。

特に、p_id = p_parent_idopu_pagescurrent_p_address_type = 'subdomain'

于 2012-03-19T09:33:46.173 に答える