0 0

DB2创建函数时出错5

CREATE FUNCTION f_days_between(expression1 IN VARCHAR2,expression2 IN VARCHAR2) RETURN INTEGER
IS
BEGIN
IF LENGTH(expression1)=10 THEN
   RETURN CEIL(TO_DATE(expression1,'YYYY-MM-DD') - TO_DATE(expression2,'YYYY-MM-DD'));
ELSIF LENGTH(expression1)=19 THEN
   RETURN CEIL(TO_DATE(expression1,'YYYY-MM-DD HH24:MI:SS') - TO_DATE(expression2,'YYYY-MM-DD HH24:MI:SS'));
ELSE
   RETURN 0;
END IF;

END f_days_between;

这句SQL老是提示如下错误:
15:54:27  [CREATE - 0 row(s), 0.000 secs]  [Error Code: -104, SQL State: 42601]  [SQL0104] 标记VARCHAR2无效。有效标记是) ,。 原因. . . . . :   在标记VARCHAR2检测到语法错误。标记VARCHAR2不是有效的标记。有效标记的部分列表为) ,。此列表假定至标记为止语句仍是正确的。语句可能在较早处已有错误,但至此标记为止,语句的语法仍是有效的。恢复. . . . . :   执行下列其中一项或多项操作并重试该请求:--验证标记VARCHAR2区域内的SQL语句。更正此语句。错误可能与欠缺逗号、引号、拼错字或与子句顺序有关。--如果错误标记是<语句结束>,则因SQL语句并未以有效子句结束,请更正。
15:54:27  [ELSIF - 0 row(s), 0.000 secs]  [Error Code: -104, SQL State: 42601]  [SQL0104] 标记ELSIF无效。有效标记是( END GET SET CALL DROP FREE HOLD LOCK OPEN WITH ALTER BEGIN。 原因. . . . . :   在标记ELSIF检测到语法错误。标记ELSIF不是有效的标记。有效标记的部分列表为( END GET SET CALL DROP FREE HOLD LOCK OPEN WITH ALTER BEGIN。此列表假定至标记为止语句仍是正确的。语句可能在较早处已有错误,但至此标记为止,语句的语法仍是有效的。恢复. . . . . :   执行下列其中一项或多项操作并重试该请求:--验证标记ELSIF区域内的SQL语句。更正此语句。错误可能与欠缺逗号、引号、拼错字或与子句顺序有关。--如果错误标记是<语句结束>,则因SQL语句并未以有效子句结束,请更正。
15:54:27  [ELSE - 0 row(s), 0.000 secs]  [Error Code: -199, SQL State: 42601]  [SQL0199] 关键字ELSE不是期望的。有效标记是( END GET SET CALL DROP FREE HOLD LOCK OPEN WITH ALTER BEGIN。 原因. . . . . :   没有预期到在此出现关键字ELSE。在关键字ELSE处检测到语法错误。有效标记部分的列表是( END GET SET CALL DROP FREE HOLD LOCK OPEN WITH ALTER BEGIN。这列表假定在非预期关键字之前,语句仍是正确的。语句先前可能已有错误,但其语法至此似乎仍为正确。恢复. . . . . :   在指定的关键字的区域内检查SQL语句。可能欠缺冒号或SQL定界符。当其用作名称时,SQL需要定界保留字。更正SQL语句。并重试该请求。
15:54:27  [END - 0 row(s), 0.000 secs]  [Error Code: -199, SQL State: 42601]  [SQL0199] 关键字IF不是期望的。有效标记是DECLARE。 原因. . . . . :   没有预期到在此出现关键字IF。在关键字IF处检测到语法错误。有效标记部分的列表是DECLARE。这列表假定在非预期关键字之前,语句仍是正确的。语句先前可能已有错误,但其语法至此似乎仍为正确。恢复. . . . . :   在指定的关键字的区域内检查SQL语句。可能欠缺冒号或SQL定界符。当其用作名称时,SQL需要定界保留字。更正SQL语句。并重试该请求。
15:54:27  [END - 0 row(s), 0.000 secs]  [Error Code: -104, SQL State: 42601]  [SQL0104] 标记F_DAYS_BETWEEN无效。有效标记是DECLARE。 原因. . . . . :   在标记F_DAYS_BETWEEN检测到语法错误。标记F_DAYS_BETWEEN不是有效的标记。有效标记的部分列表为DECLARE。此列表假定至标记为止语句仍是正确的。语句可能在较早处已有错误,但至此标记为止,语句的语法仍是有效的。恢复. . . . . :   执行下列其中一项或多项操作并重试该请求:--验证标记F_DAYS_BETWEEN区域内的SQL语句。更正此语句。错误可能与欠缺逗号、引号、拼错字或与子句顺序有关。--如果错误标记是<语句结束>,则因SQL语句并未以有效子句结束,请更正。
... 5 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 5 errors]

边一个最简单的创建函数都出错,是不是权限的问题?

问题补充:CREATE FUNCTION f_days_between(expression1 VARCHAR(50),expression2 VARCHAR(5)) RETURN INTEGER
IS
BEGIN
   RETURN 0;
END;
写成最简单也是会报错。
2011年5月30日 15:55

2个答案 按时间排序 按投票排序

0 0

引用
问题补充:
CREATE FUNCTION f_days_between(expression1 VARCHAR(50),expression2 VARCHAR(5)) RETURN INTEGER
IS
BEGIN
   RETURN 0;
END;
写成最简单也是会报错。


我真心觉得,你应该先自己看下DB2的语法
声明时候是 RETURNS要有S 程序里木有
还有你那个 IS 后面要表达什么呢?
建议你自己设置 FIN-INSTRUCTION,不然他会每个分号执行一次
这样肯定报错,比如你在最后写个<GO>然后把结束标示也设成这个
它运行时候看到<GO>才会执行

2011年6月01日 16:39
0 0

难道不应该是 VARCHAR(2) ???
之后的错误都是因为你 expression1声明错误才造成的
修改后应该就没了
还有最后直接END;就好了,不需要加function名字

2011年5月30日 16:45

相关推荐

    DB2异常SQLCODE信息

    - **+22001546**:确认PLANTABLE的完整性时出错,可能是在创建或修改PLANTABLE时数据一致性检查失败。 - **+23601005**:SQLDA(SQL描述区域)中的SQLN值与期望值不符,通常是在调用SQL函数时参数传递错误。 - **+...

    数据业务工程师DB2入门指南

    - 创建:在DB2中,可以通过`CREATE DATABASE`命令来创建新的数据库。 - **1.2.3 配置文件** - 定义:配置文件用于定义DB2实例或数据库的行为特性。 - 例子:`db2instance.ini`用于定义实例级别的配置参数;`...

    Itrenzheng IBM DB2 000-730认证题库

    一个用户调用用户定义的函数时需要哪种 DB2 权限? **选项:** A. CALL B. USAGE C. EXECUTE D. REFERENCES **答案:** C. EXECUTE **解析:** 在 DB2 中,为了调用一个用户定义的函数 (UDF),用户必须被授予...

    DB2 SQLSTATE CODE

    "DB2 SQLSTATE CODE" ...* 01596 没有为基于长字符串数据类型的单值类型创建比较函数。 * 01598 尝试... 通过了解 DB2 SQLSTATE 代码,我们可以快速定位和解决问题,提高应用程序的稳定性和可靠性。

    db2 错误列表

    缺少必要的输入参数,这通常发生在函数或存储过程调用时,未提供足够的参数。 #### SQLCODE +46401609 查询结果集过大,可能是因为查询返回了过多的结果,超过了系统的限制。 #### SQLCODE +46601610 无法查询结果...

    DB2存储过程

    创建DB2存储过程的标准格式包括以下几个部分: - **DROPPROCEDURE**:如果已存在同名存储过程,则先删除再创建。 - **CREATEPROCEDURE**:声明一个新的存储过程。 - **参数定义**:输入输出参数的定义。 - **...

    DB2编程序技巧 (三)

    DB2支持用户自定义函数(UDF),用户可以根据需要编写自己的函数来扩展DB2的功能。这些函数可以使用C语言编写,并保存在`sqllib\samples\cli\udfsrv.c`文件中。具体的实现细节可以参考DB2官方文档或相关示例。 ####...

    试谈数据库创建及其查询.pptx

    在人工管理信息的时代,信息保存和管理效率低下,易出错。随着科技的发展,人们开始利用文件系统来改善这一情况,但仍然存在查找困难的问题。数据库应运而生,它是一个有组织的、与企业或组织业务活动和结构相匹配的...

    C语言MySQL操作

    ODBC是一个由微软提出的数据库访问标准,它提供了一个统一的API(应用程序编程接口),允许程序通过一组通用的函数来连接并操作不同的数据库系统,如MSSQLServer、MySQL、DB2、Oracle和Access等。这使得开发者无需...

    GBase-8a MPP Cluster产品技术手册-D.docx

    - **问题描述**:在虚拟集群中执行包含div函数的SQL语句时,可能会遇到数值溢出错误。 - **解决方案**:确认div函数的输入数据类型和范围;调整SQL语句的计算逻辑。 7. **SWAP空间不足将导致进程被操作系统杀掉**...

Global site tag (gtag.js) - Google Analytics