は、ストアドプロシージャに次のコードを実行しようとすると:CASEステートメントが "after case after"をどうして返すのでしょうか?
CASE
WHEN recordNotes=null AND sortNumber=null
THEN INSERT INTO tempRecordHolder (union_ID,union_Name) VALUES (recordID, recordName);
ELSE SET @blank="null";
END CASE;
「recordNotes」、「sortNumber」、「レコードID」、および「のRecordNameは、」ストアドプロシージャに渡された変数です。私の目標は、INSERT文を関数の最初に作成したtempRecordHolderテーブルに実行させることです。しかし何らかの理由で、「ケースの後に予期せぬ事態が発生する」と言います。何か案は?ありがとうございました。
フルコード、コメントを無視してコードをコメントアウトしてください。それは作業されているすべてのものです。 CASEは34-41行目にあります。
CREATE DEFINER=`apf15102`@`%` PROCEDURE `sp_cu_LookUpTbls`(
IN tbl_Name varchar(50),
recordID int,
recordName varChar(500),
# REMEMBER THERE IS A DATE BETWEEN THESE TWO FIELDS IN THE TABLE STRUCTURES
recordNotes longtext,
sortNumber int,
recordAlreadyExists bit
)
BEGIN
#-------------------------------#
# Begin preliminary table setup #
#-------------------------------#
# Begin by dropping my temp table
DROP TEMPORARY TABLE IF EXISTS tempRecordHolder;
# set my session variable equal to my passed in table name
SET @tblName = tbl_Name;
# create a session variable string that is the create table for the table that was passed in
SET @tbl_Create_Command = concat("CREATE TEMPORARY TABLE tempRecordHolder LIKE " , @tblName);
# prepare the statement making it one string that can be executed then execute it
prepare stmtCreate FROM @tbl_Create_Command;
execute stmtCreate;
#-----------------------------#
# End preliminary table setup #
#-----------------------------#
# This code right here gives a "Syntax Error: Unexpected WHEN (when)" if it is un-commented
/*
CASE
WHEN recordNotes IS NULL AND sortNumber IS NULL
THEN INSERT INTO tempRecordHolder (union_ID,union_Name) VALUES (recordID, recordName);
ELSE SET @blank="null";
END CASE;
*/
IF recordAlreadyExists = FALSE
THEN
#-----------------------------------------------------------------#
# Begin procedure for if the record DOES NOT exist in our records #
#-----------------------------------------------------------------#
IF sortNumber IS NULL
THEN
INSERT INTO tempRecordHolder VALUES (recordID, recordName, curdate(), recordNotes);
END IF;
IF sortNumber IS NOT NUll
THEN
INSERT INTO tempRecordHolder VALUES (recordID, recordName, curdate(), recordNotes, sortNumber);
END IF;
#---------------------------------------------------------------#
# End procedure for if the record DOES NOT exist in our records #
#---------------------------------------------------------------#
ELSE
#-------------------------------------------------------------#
# Begin procedure for if the record DOES exist in our records #
#-------------------------------------------------------------#
IF recordAlreadyExists = TRUE
THEN
SET @elsevar = null;
END IF;
#-----------------------------------------------------------#
# END procedure for if the record DOES exist in our records #
#-----------------------------------------------------------#
END IF;
/*
#-----------------------------#
# Begin data processing setup #
#-----------------------------#
# Declare all the necessary variables for making a cursor
DECLARE finished BOOLEAN DEFAULT FALSE;
DECLARE colNameForInsert varChar(50);
DECLARE columnName CURSOR FOR
(
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_NAME`='tempRecordHolder';
);
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = TRUE;
#---------------------------#
# END data processing setup #
#---------------------------#
#--------------------------------#
# Begin main loop and processing #
#--------------------------------#
OPEN columnName;
manFunc: loop
# check to see if we are done before running the rest of the loop
IF finished = TRUE THEN
LEAVE mainFunc;
END IF;
FETCH columnName INTO colNameForInsert;
IF
END LOOP mainFunc;
CLOSE columnName;
#------------------------------#
# END main loop and processing #
#------------------------------#
*/
END
私はCASE文を使用しようとしていましたが、そうではありませんか? http://www.w3resource.com/mysql/mysql-procedure.php#MIF –
@AndréFecteau。 。 。これより前にコードをもっと表示する必要があります。 '= null'は単に間違っていることにも注意してください。このため、私はあなたのすべてのコードがあまり書かれていないと思われます。 –
を終了する場合は、ENDを使用する必要があります。私が別のコメントで言ったように、NULLでの等価性検査はIS NULLで行わなければならず、= –