3

MYSQL ストアド プロシージャでは、両方のテーブル列を選択し、そのプロシージャ内でさらに使用するために列を変数に選択する必要があります。

以下は、ストアド プロシージャの簡略化されたバージョンです。

DECLARE pUSR_ID BIGINT;
DECLARE pPRJ_ID BIGINT;
DECLARE pUSR_LAN_ID BIGINT;

SELECT USR_ID, USR_Login, USR_Password, USR_Archived, USR_Deleted, 
  USR_ID, USR_PRJ_ID, USR_LAN_ID INTO pUSR_ID, pPRJ_ID, pUSR_LAN_ID
FROM tblUsers
WHERE USR_Login = 'foobar';

上記のストアド プロシージャを実行すると、意味のある次のエラー メッセージが表示されます。

Error Code: 1222. The used SELECT statements have a different number of columns

そのため、最初に変数を配置し、変数の後に他の列を配置しました。

SELECT USR_ID, USR_PRJ_ID, USR_LAN_ID INTO pUSR_ID, pPRJ_ID, pUSR_LAN_ID,
  USR_ID, USR_Login, USR_Password, USR_FullName, USR_IsProjectAdmin, USR_Archived,
  USR_Deleted
これを実行すると: が返されますError 1327: Undeclared variable: USR_ID。エラーが発生する理由を理解しています。

私が理解していないのは、テーブルの列選択する方法と、同じステートメントで特定の列を変数に選択する方法です。

4

1 に答える 1

3
/*
DECLARE pUSR_ID BIGINT;
DECLARE pPRJ_ID BIGINT;
DECLARE pUSR_LAN_ID BIGINT;
*/ /*no need to declare*/


SELECT 
@pUSR_ID:=USR_ID, 
USR_Login, 
USR_Password, 
USR_Archived, 
USR_Deleted, 
USR_ID, 
@pPRJ_ID:=USR_PRJ_ID, 
@pUSR_LAN_ID:=USR_LAN_ID 
FROM tblUsers
WHERE USR_Login = 'foobar';
于 2012-12-17T14:59:13.880 に答える