1
我正在學習使用SQLAnywhere的SQL,我相信使用一個相當標準的SQL語法檢查一個值是否在輸入
我的問題是我創建了一個表MatchRecord一個id爲char小數(4) NOT NULL,十進制分數和十進制引腳。
現在我想創建一個過程insert_scores把值插入到表 我有這麼遠:
create procedure insert_scores(IN play_id char(4), IN play_score decimal(5, 2),
IN no_pins decimal(5, 2), OUT a_message varchar(40))
begin
if substr(play_id, 1, 1)in (Upper('M','F', 'J'
then
if isnumeric(substr(play_id 2, 3)) = 1
then
if isnumeric(play_score) = 1
then
if isnumeric(no_pins) = 1
then
insert into MatchRecord(id, score, pins)
values(play_id, play_score, no_pins);
set a_message = 'Entry successful';
else
set a_message = 'Number of pins must be decimal ie, 1.6 ';
end if;
else
set a_message = 'Score must be decimal ie, 9.4 ';
end if;
else
set a_message = 'ID number must be in range 000 to 999 ';
end if;
else
set a_message = 'First character of ID must be M, F of J':
end if;
末
這工作得很好除了對角色的任何意外插入系統拋出一個錯誤,似乎在讀取if語句之前檢查表的類型, 我試過isnumeric(string(play_score))= 1,但仍然是相同的錯誤。
有什麼辦法檢查在play_score和no_pins中傳遞的數字是否是第一個if語句之前的小數?
感謝拉杜,但如果輸入是2a.5它仍然會失敗。 – nigs
你沒有指定這種情況。您應該從應用程序中刪除字母和其他字符。或者你想嚴格遵守SQL? –
試圖嚴格保持SQL。我試圖檢查SQLSTATE,但它不接受,所以我試圖捕獲一個異常,但它也不會這樣做。 – nigs