积木首页 - 学院 - 软件测试 - 技术百科 - 问答 - 黄页 - 手册 - 站长工具 - 社区
登录 | 注册
积木技术社区 » DB2 » 为什么下面这段程序不能在DB2命令编辑器中运行?在线等.
打印 楼主:wangyx 发表于 2009-12-21 10:05 [回复13次/有效10个,浏览507次]

为什么下面这段程序不能在DB2命令编辑器中运行?在线等.

CREATE FUNCTION "BRAS".FUN_GET_LSH_FROM_YJNR ( yjnr VARCHAR(80) )
RETURNS VARCHAR(30)
BEGIN ATOMIC
declare v_startpos real;
declare v_endpos real;
declare v_len real;
declare v_fhy varchar(100);
declare v_lsh varchar(100);
declare Result varchar(30);

set v_startpos = locate('主机流水号:',yjnr);
if(v_startpos = 0) then
return '';
end if;
set v_endpos = locate('|柜员流水号',yjnr);
if(v_endpos = 0) then
return '';
end if;
set v_startpos = v_startpos + 6;
set v_len = v_endpos-v_startpos;
set Result = '';
if (v_len > 0) then
set Result = substr(yjnr,v_startpos,v_len);
end if;

RETURN Result;
END;

错误信息:
CREATE FUNCTION "BRAS".FUN_GET_LSH_FROM_YJNR ( yjnr VARCHAR(80) )
RETURNS VARCHAR(30)
BEGIN ATOMIC
declare v_startpos real
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "C declare v_startpos" 后面找到异常标记
"real"。预期标记可能包括:"END-OF-STATEMENT"。 LINE NUMBER=4. SQLSTATE=42601

declare v_endpos real
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "declare v_endpos " 后面找到异常标记
"real"。预期标记可能包括:"END-OF-STATEMENT"。 SQLSTATE=42601

declare v_len real
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "declare v_len " 后面找到异常标记
"real"。预期标记可能包括:"END-OF-STATEMENT"。 SQLSTATE=42601

declare v_fhy varchar(100)
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "declare v_fhy
varchar"。预期标记可能包括:" <values>"。 SQLSTATE=42601

declare v_lsh varchar(100)
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "declare v_lsh
varchar"。预期标记可能包括:" <values>"。 SQLSTATE=42601

declare Result varchar(30)
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "declare Result
varchar"。预期标记可能包括:" <values>"。 SQLSTATE=42601

set v_startpos = locate('主机流水号:',yjnr)
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "set v_startpos
="。预期标记可能包括:" <values>"。 SQLSTATE=42601

if(v_startpos = 0) then return ''
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记
""。预期标记可能包括:" <create_view>"。 SQLSTATE=42601

end if
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "end if" 后面找到异常标记
"END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。 SQLSTATE=42601

set v_endpos = locate('|柜员流水号',yjnr)
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "set v_endpos
="。预期标记可能包括:" <values>"。 SQLSTATE=42601

if(v_endpos = 0) then return ''
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记
""。预期标记可能包括:" <create_view>"。 SQLSTATE=42601

end if
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "end if" 后面找到异常标记
"END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。 SQLSTATE=42601

set v_startpos = v_startpos + 6
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "set v_startpos
="。预期标记可能包括:" <values>"。 SQLSTATE=42601

set v_len = v_endpos-v_startpos
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "set v_len
="。预期标记可能包括:" <values>"。 SQLSTATE=42601

set Result = ''
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "set " 后面找到异常标记 "Result"。预期标记可能包括:"JOIN
<joined_table>"。 SQLSTATE=42601

if (v_len > 0) then set Result = substr(yjnr,v_startpos,v_len)
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "if " 后面找到异常标记 "(v_len > 0) then set Result
="。预期标记可能包括:" <space>"。 SQLSTATE=42601

end if
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "end if" 后面找到异常标记
"END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。 SQLSTATE=42601

RETURN Result
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "RETURN Result" 后面找到异常标记
"END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。 SQLSTATE=42601

END
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N 在 "END" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN
<joined_table>"。 SQLSTATE=42601

SQL0104N 在 "END" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table> "。

解释:

在文本 " <文本>" 后面的指定标记处检测到 SQL
语句中或 SYSPROC.ADMIN_CMD
过程的输入命令字符串中的语法错误。 " <文本>"
字段指示无效标记前面的 SQL 语句中或 SYSPROC.ADMIN_CMD
过程的输入命令字符串的 20 个字符。

作为帮助,在 SQLCA 的 SQLERRM
字段中,提供了有效标记的部分列表作为
" <标记列表>"。此列表假设语句到该位置为止
是正确的。

无法处理该语句。

用户响应:

在指定的标记区域内检查并更正语句。

sqlcode : -104

sqlstate : 42601
2楼 发表于 2009-12-21 16:06
改成@了,为什么会提示:
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0440N 未找到类型为 "FUNCTION" 命名为 "SUBSTR"
且具有兼容自变量的已授权例程。 LINE NUMBER=23. SQLSTATE=42884
是不是V9.1版本里面SUBSTR用的不对吗?
3楼 发表于 2009-12-21 21:06
类似MYSQL中的结束符问题
在FUNCTION的最后加上@
然后把命令编辑器默认的语句中止字符;改为@

FUNCTION中每句都有;所以系统默认语句已经结束
4楼 发表于 2009-12-22 04:42
然后把命令编辑器默认的语句中止字符;改为@:修改没有
5楼 发表于 2009-12-22 11:01
db2 list command options
可以看到有关帮助
-t 设置语句终止字符
6楼 发表于 2009-12-22 15:12
@写在最后面,end后面
7楼 发表于 2009-12-22 21:16
@是改成在END后面的,错误信息是:
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0440N 未找到类型为 "FUNCTION" 命名为 "SUBSTR"
且具有兼容自变量的已授权例程。 LINE NUMBER=23. SQLSTATE=42884
这是怎么回声事啊
8楼 发表于 2009-12-22 23:37
CREATE FUNCTION "BRAS".FUN_GET_LSH_FROM_YJNR ( yjnr VARCHAR(80) )
RETURNS VARCHAR(30)
BEGIN ATOMIC
declare v_startpos real;
declare v_endpos real;
declare v_len real;
declare v_fhy varchar(100);
declare v_lsh varchar(100);
declare Result varchar(30);

set v_startpos = locate('主机流水号:',yjnr);
if(v_startpos = 0) then
return '';
end if;
set v_endpos = locate('|柜员流水号',yjnr);
if(v_endpos = 0) then
return '';
end if;
set v_startpos = v_startpos + 6;
set v_len = v_endpos-v_startpos;
set Result = '';
if (v_len > 0) then
set Result = substr(yjnr,v_startpos,v_len);
end if;

RETURN Result;
END; @
保存为TXT文件

再连接数据库,执行db2 -td@ -f txtfilename
9楼 发表于 2009-12-23 07:43
or
将上述代码保存为1。SQL
D:\>db2 -td@ -f 1.sql
10楼 发表于 2009-12-23 13:08
DB2有SUBSTR函数,你将两个参数修改成INT(INTEGER)类型试试
11楼 发表于 2009-12-23 17:23
如需要阅读该回复,请登录或注册gimoo!
标题:
内容:

PHP: PHP技巧 - PHP基础 - PHP实例 - PHP错误代码 - 正则表达式 - 热门脚本语言: DOS命令 - vbs - CSS/HTML - python - perl - ruby - shell编程 - Powershell

JS: node.js - JS基础 - extjs - jQuery - JavaScript技巧

网址导航成语大全积木 TinyMCE 服务邮箱: Gimoohr(#)gmail.com
Copyright © 2008 Gimoo.Net  京ICP备05050695号