Try this:
CREATE PROCEDURE Upsert_Page(
pageID smallint,
pageTitle varchar(50),
pageName varchar(50),
pageViewable tinyint,
pageDeleted tinyint,
pageMetaData varchar(5000),
pageParent smallint,
pageRequired tinyint,
pageAdmin tinyint
)
BEGIN
IF (SELECT 1 = 1 FROM Page WHERE Page.ID = pageID) THEN
UPDATE `Page`
SET `Page`.`Title` = pageTitle,
`Page`.`Name` = pageName,
`Page`.`IsViewable` = pageViewable,
`Page`.`IsDeleted` = pageDeleted,
`Page`.`MetaData` = pageMetaData,
`Page`.`ParentID` = pageParent,
`Page`.`IsRequired` = pageRequired,
`Page`.`IsAdmin` = pageAdmin
WHERE `Page`.`ID` = pageID;
ELSE
begin
DECLARE last_id int;
INSERT INTO `Page`(`Title`, `Name`, `IsViewable`, `IsDeleted`,
`MetaData`, `ParentID`, `IsRequired`, `IsAdmin`)
VALUES (pageTitle, pageName, pageViewable, pageDeleted,
pageMetaData, pageParent, pageRequired, pageAdmin);
SET last_id = LAST_INSERT_ID();
INSERT INTO `PageWidget`(`ID`,`WidgetID`,`PageID`)
SELECT
null, `Widget`.`ID`, last_id
FROM `Widget`
JOIN `WidgetType` ON `Widget`.`WidgetTypeID` = `WidgetType`.`ID`
WHERE `WidgetType`.`IsUnique` = 1;
end;
END IF;
END;
/
Now it compiles fine, see this demo : http://www.sqlfiddle.com/#!2/a3d58
(you will need to scroll to the bottom of the left panel)
There were some small errors - missing semicolons, missing backtick characters etc.
One remark: IF ... THEN ... END
doesn't need BEGIN ... END
block, just:
IF condition THEN
statements
.....
.....
ELSE
statements
....
....
END IF;