ここでは、Mysqlエラー:1241に関連したstackoverflowの別のトピックがあります。すべてのトピックを読み、サブクエリに関する共通の問題があります。しかし、私の問題は異なっています。MySqlコード:1241オペランドには1列が含まれている必要があります
問題: - のMySqlコード: - プリペアドステートメントで
NOTE私のストアドプロシージャの1 - 私のselect文を1241オペランドが FROM 1列(複数可)
を含める必要がありますサブクエリと私の更新ステートメントはありません。
スクリーンショット - あなたは、単一の変数にタプルを代入することはできませんACTUAL SS
ストアドプロシージャコード
CREATE PROCEDURE CancelRow_EM(IN tbl_name VARCHAR(25), IN rowindex FLOAT, OUT flagresult TINYINT, OUT msgresult VARCHAR(300))
BEGIN
START TRANSACTION;
IF tbl_name="emps_tbl" THEN
SET @PrimaryCol="EMPS_ID";
SET @RefCol="OBR NO.";
ELSEIF tbl_name="emmooe_tbl" THEN
SET @PrimaryCol="EMMOOE_ID";
SET @RefCol="PR NO.";
ELSEIF tbl_name="emco_tbl" THEN
SET @PrimaryCol="EMCO_ID";
SET @RefCol="PR NO.";
END IF;
SET @select1=CONCAT("SELECT `LINK_ID`,`",@RefCol,"` INTO @li,@Ref FROM `",tbl_name,"` WHERE ROUND(`EMPS_ID`,3)=",rowindex);
PREPARE stmtselect1 FROM @select1;
EXECUTE stmtselect1;
DEALLOCATE PREPARE stmtselect1;
If @li IS NOT NULL THEN
SET flagresult=0;
SET msgresult="Cancellation of record was stopped. Reason: Earmark record was already utilize.";
ELSE
SET @update1=CONCAT("UPDATE `",tbl_name,"` SET `CANCEL_STATUS`=1 WHERE ROUND(`",@PrimaryCol,"`,3)=",rowindex," AND `",@RefCol,"`='",@Ref,"'");
PREPARE stmtupdate1 FROM @update1;
EXECUTE stmtupdate1;
SELECT row_count() INTO @RowsAffected1;
DEALLOCATE PREPARE stmtupdate1;
IF @RowsAffected1>0 THEN
SET flagresult=1;
SET msgresult=("No. of affected rows(s):",@RowsAffected1,", from modification process.");
COMMIT;
ELSE
SET flagresult=0;
SET msgresult=("There are no affected row(s) from modification process.");
ROLLBACK;
END IF;
END IF;
END
WTF ...私は気づいていませんでした。私は、concat関数を置くのを忘れていました.hahahah thanks @Bill Karwin。 – mrRobot
これは病気です。どうして私はビルハハハに気付かなかったでしょう。この問題は昨日私の頭が痛む。 – mrRobot
うん!我々はすべてそこにいた。あなたは、単純な 'SET'ステートメントを見落としたあなたの質問の1つである原因に焦点を合わせました。乾杯! –