2011-10-20 16 views
0

私は以下のようにmysql dbに追加する機能を持っています。phpMyAdminで試してみましたが、追加してもしなくても機能しません。存在しない。私がここで紛失しているものは何ですか?phpMyAdminでmysqlの機能を追加

DELIMITER // 

CREATE FUNCTION GISWithin(pt POINT, mp MULTIPOLYGON) RETURNS INT(1) DETERMINISTIC 
BEGIN 

DECLARE str, xy TEXT; 
DECLARE x, y, p1x, p1y, p2x, p2y, m, xinters DECIMAL(16, 13) DEFAULT 0; 
DECLARE counter INT DEFAULT 0; 
DECLARE p, pb, pe INT DEFAULT 0; 

SELECT MBRWithin(pt, mp) INTO p; 
IF p != 1 OR ISNULL(p) THEN 
RETURN p; 
END IF; 

SELECT X(pt), Y(pt), ASTEXT(mp) INTO x, y, str; 
SET str = REPLACE(str, 'POLYGON((',''); 
SET str = REPLACE(str, '))', ''); 
SET str = CONCAT(str, ','); 

SET pb = 1; 
SET pe = LOCATE(',', str); 
SET xy = SUBSTRING(str, pb, pe - pb); 
SET p = INSTR(xy, ' '); 
SET p1x = SUBSTRING(xy, 1, p - 1); 
SET p1y = SUBSTRING(xy, p + 1); 
SET str = CONCAT(str, xy, ','); 

WHILE pe > 0 DO 
SET xy = SUBSTRING(str, pb, pe - pb); 
SET p = INSTR(xy, ' '); 
SET p2x = SUBSTRING(xy, 1, p - 1); 
SET p2y = SUBSTRING(xy, p + 1); 
IF p1y < p2y THEN SET m = p1y; ELSE SET m = p2y; END IF; 
IF y > m THEN 
IF p1y > p2y THEN SET m = p1y; ELSE SET m = p2y; END IF; 
IF y <= m THEN 
IF p1x > p2x THEN SET m = p1x; ELSE SET m = p2x; END IF; 
IF x <= m THEN 
IF p1y != p2y THEN 
SET xinters = (y - p1y) * (p2x - p1x)/(p2y - p1y) + p1x; 
END IF; 
IF p1x = p2x OR x <= xinters THEN 
SET counter = counter + 1; 
END IF; 
END IF; 
END IF; 
END IF; 
SET p1x = p2x; 
SET p1y = p2y; 
SET pb = pe + 1; 
SET pe = LOCATE(',', str, pb); 
END WHILE; 

RETURN counter % 2; 

END; 

DELIMITER ; 

答えて

7

あなたは//にあなたの区切り文字を設定しましたが、最終的なEND文は;で終了し、その関数が作成されたことがないそうです。

は、それを変更してみてください:

END// 

UPDATE:それは唯一のMySQL CLIクライアント・コマンドですので

phpMyAdminが尊重やDELIMITERについて知りません。 According to this postには、phpMyAdminに区切り文字を設定するテキストボックスがあります。そこに//を入力し、コードからDELIMITERステートメントを削除します。

+0

//を入れてみてください。 SQLクエリにエラーがあるようです。 10 STR @不明句読点文字列:// SQL:以下のMySQLサーバのエラー出力は、いずれかが存在する場合、また問題 ERRORの診断であなたを助けるかもしれない// ELIMITERは、FUNCTIONのGISWithin(PTのPOINT、MPをCREATEマルチポリゴン)復帰INT(1)決定的 BEGIN DECLARE str、xy TEXT; – newbie14

+0

phpMyAdminのように見えるのは、MySQL CLIクライアントコマンドだけであるため、DELIMITERを尊重したり知ったりすることはありません。この投稿によると、区切り文字を設定するためのphpMyAdminのテキストボックスがあります。そこに '//'を入力し、あなたのコードから 'DELIMITER'文を削除してください。 http://forums.mysql.com/read.php?98,126320,247753#msg-247753 –

+0

あなたは救い主です! – saada

1

は、私はこのエラーを取得する//エンドを試してみましたend

+0

私は準備ができていることを確認しました。以前のエラーのD文字が欠けています。私はもう一度最後に置いてみましたが、作成する関数には同じ確認メッセージはありませんか? Goを押すと、メッセージの読み込みが始まります – newbie14

関連する問題