我正在使用 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 语句之前的小数吗?