1

ここで別の問題を解決しようとしています。私の問題に対する答えを見つけるには、SP に一致するようにクエリを変更する必要があるとメンバーから言われました。そのために変数を宣言するように言われたので、SP のように変数を使用しています。私の問題は、目を痛めているほど読んでいて、フリギン変数を宣言する方法がわからないことです。

助けてください!!

これは私がこれまで読んだものです:

リソース 1リソース 2リソース 3リソース 4リソース 5

そして、私は続けることができました。私は文字通り立ち往生しています。私はSQLが初めてで、これが私を悩ませています。SP を使用する必要はありませんが、すべきこととすべきでないことを学び、できれば他の人を助けるために十分に学ぶことができるようにしたいと思っています。

DECLARE zipcode VARCHAR(30)
DECLARE radius VARCHAR(30)
SET zipcode = 08360
SET radius = 50

SELECT C.CustomerName, C.MenuId
FROM Customers C
INNER JOIN (
  SELECT ZIPCODE, ( 3959 * ACOS( COS( RADIANS( (
    SELECT Z.LAT
    FROM ZipCodes Z
    WHERE Z.ZIPCODE =zipcode
    LIMIT 0 , 1
    ) ) ) * COS( RADIANS( LAT ) ) * COS( RADIANS( LNG ) - RADIANS( (

      SELECT Z.LNG
      FROM ZipCodes Z
      WHERE Z.ZIPCODE =zipcode
      LIMIT 0 , 1
    ) ) ) + SIN( RADIANS( (

    SELECT Z.LAT
    FROM ZipCodes Z
    WHERE Z.ZIPCODE =zipcode
    LIMIT 0 , 1
  ) ) ) * SIN( RADIANS( LAT ) ) ) ) AS distance
  FROM ZipCodes
  HAVING distance <radius
  ORDER BY distance
) AS RelevantCodes ON ( C.ZIPCODE = RelevantCodes.ZIPCODE )

私はインターネットで見たものから非常に多くの組み合わせを試しましたが、それ以上何もするのは夜が遅すぎると思い始めています. 私が調べたリソースのいくつかを見ると、'@' がある場合とない場合の違いがどこにあるのかがわかります。

4

1 に答える 1

1

ストアド プロシージャを作成する場合は、適切な構文を使用する必要があります。

参照: http://dev.mysql.com/doc/refman/5.5/en/create-procedure.html
proc 本体内では、すべてのステートメントを . で終了する必要があることに注意してください;

body proc がいつ終了するかを MySQL に知らせる必要があり、区切り文字を . ではないものに再宣言する必要があるため;です。これにより、MySQL は最初の ';' の後にストアド プロシージャを解釈できなくなりますが、代わりに$$.

関数の入力が完了したら、区切り文字をデフォルトに戻すことを忘れないでください。

SET DELIMITER $$

CREATE PROCEDURE QueryCustomerMenu(IN zipcode VARCHAR(30), IN radius VARCHAR(30))
BEGIN

DECLARE somevar VARCHAR(20);
SET somevar = '456';

SELECT C.CustomerName, C.MenuId
FROM Customers C
INNER JOIN (
  SELECT ZIPCODE, ( 3959 * ACOS( COS( RADIANS( (
    SELECT Z.LAT
    FROM ZipCodes Z
    WHERE Z.ZIPCODE =zipcode
    LIMIT 0 , 1
    ) ) ) * COS( RADIANS( LAT ) ) * COS( RADIANS( LNG ) - RADIANS( (

      SELECT Z.LNG
      FROM ZipCodes Z
      WHERE Z.ZIPCODE =zipcode
      LIMIT 0 , 1
    ) ) ) + SIN( RADIANS( (

    SELECT Z.LAT
    FROM ZipCodes Z
    WHERE Z.ZIPCODE =zipcode
    LIMIT 0 , 1
  ) ) ) * SIN( RADIANS( LAT ) ) ) ) AS distance
  FROM ZipCodes
  HAVING distance <radius
  ORDER BY distance
) AS RelevantCodes ON ( C.ZIPCODE = RelevantCodes.ZIPCODE );

END $$

SET DELIMITER ;

これで、ストアド プロシージャを次のように呼び出すことができます。

CALL QueryCustomerMenu('09210','20');

CustomerNameそして、 and を含む結果セットを返しMenuIDます。

于 2013-02-10T09:11:58.857 に答える