local-declaration
BEGIN のすぐ後で、複合文は複合文の中にだけ存在するオブジェクトをローカルに宣言できます。複合文は、変数、カーソル、テンポラリテーブル、または例外に対してローカル宣言を行います。ローカル宣言は、複合文またはその中でネストされる複合文の中のどの文からでも参照できます。複合文のローカル宣言は、文の例外ハンドラに表示されます。ローカル宣言は、複合文の中から呼び出される他のプロシージャには表示されません。
CREATE PROCEDURE TopCustomer (OUT TopCompany CHAR(35), OUT TopValue INT)
BEGIN
DECLARE err_notfound EXCEPTION FOR
SQLSTATE '02000';
DECLARE curThisCust CURSOR FOR
SELECT CompanyName, CAST(
sum( SalesOrderItems.Quantity *
Products.UnitPrice ) AS INTEGER) VALUE
FROM GROUPO.Customers
LEFT OUTER JOIN SalesOrders
LEFT OUTER JOIN SalesOrderItems
LEFT OUTER JOIN Products
GROUP BY CompanyName;
DECLARE ThisValue INT;
DECLARE ThisCompany CHAR( 35 );
SET TopValue = 0;
OPEN curThisCust;
CustomerLoop:
LOOP
FETCH NEXT curThisCust
INTO ThisCompany, ThisValue;
IF SQLSTATE = err_notfound THEN
LEAVE CustomerLoop;
END IF;
IF ThisValue > TopValue THEN
SET TopValue = ThisValue;
SET TopCompany = ThisCompany;
END IF;
END LOOP CustomerLoop;
CLOSE curThisCust;
END;
下の例は、次の変数を宣言しています。
INT、初期設定値 5 の v1。
CHAR(10)、初期値 abc の v2 と v3。
BEGIN
DECLARE v1 INT = 5
DECLARE v2, v3 CHAR(10) = 'abc'
// ...
END