我正在尝试创建一个存储过程,该过程将占用50个字节的字符串,并一次扫描一个字节以查找逗号。找到后我想更新一个字段,然后继续扫描字符串以查找其他逗号。
我正在使用Firebird数据库并使用DBVisualizer
来开发代码。
@delimiter ++;
CREATE PROCEDURE scan_for_comma(
lastname_field CHAR(50),
sr_bold_id int
)
RETURNS (
comma_flag varchar(1))
AS
declare variable max_bytes inv default 50;
declare variable I integer;
BEGIN
I = 0;
While
(I <= max_bytes)
DO
Begin
if (substring(name_field from I for 1) = ',') then
Begin
comma_flag = 'Y'
I = I +1
UPDATE sr_address
SET lastname = (substring(name_field from i for 1) = ' ')
WHERE bold_id = :sr_bold_id
end
ELSE
(substring(name_field from loop_cnt for 1) != ',') then
Begin
I = I +1
END
END
END
++
@delimiter ;++
我收到此错误
14:45:34 [@DELIMITER - 0行,0.000秒]
命令处理
14:45:34 [创建 - 0行,0.000秒]
[错误代码:335544569,SQL状态:HY000]
GDS例外。 335544569.
动态SQL错误SQL错误代码= -104令牌未知 - 第21行,第12列 14:45:34 [@DELIMITER - 0行,0.000秒]
命令已处理...
执行3个语句,0行受影响,执行/获取时间:0.000 / 0.000秒
[2个成功,0个警告,1个错误]
非常感谢任何帮助/方向。
非常感谢。
答案 0 :(得分:1)
我不知道DBVisualizer,但我会尝试语法:
set term ++ ;
create procedure ...
:
end ++
set term ; ++
答案 1 :(得分:0)
您应该添加一个suspend命令来返回行。 例如:
comma_flag = 'Y';
suspend; -- returns a row
答案 2 :(得分:0)
在表达
中 ...
ELSE
(substring(name_field from loop_cnt for 1) != ',') then
...
在ELSE之后缺少关键字 IF
答案 3 :(得分:0)
在ISQL中它不是@delimiter,而是SET TERM,但这只是关于ISQL和其他一些工具(例如FlameRobin)。
但是,SET TERM的使用并不特定于Firebird本身(数据库引擎本身不知道该命令)。您很可能不需要在此工具中指定分隔符。只是在程序的END
之后不要使用分隔符。