从“应用程序开发指南”定义外部(C)UDF示例 [英] Defining External (C) UDF example from Application Development Guide

查看:55
本文介绍了从“应用程序开发指南”定义外部(C)UDF示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在AIX上为DB2 8.1成功编译了以下UDF示例

4.3.3。当我尝试下面的db2 define function命令时,我得到以下错误的




DB21034E该命令被处理为SQL语句,因为它是

不是有效的命令行处理器命令。在SQL处理期间它返回


SQL0204N" IN1"是一个未定义的名称。 LINE NUMBER = 1。 SQLSTATE = 42704


我需要运行bind吗?

我的库是/ home / maddev / sqllib / function / udfsrv
我看到当我转储该文件时编译.product:


[83] m 0x10000a90 1 1 0x02 0x0020 .product

[84] a4 0x00000045 0 0 2 0 0 0


来自应用程序开发指南:

-------------- -------------------------------------------------- ----------

以下是一个C / C ++ UDF的示例,它返回

的两个输入参数的产品:


SQL_API_RC SQL_API_FN产品(SQLUDF_DOUBLE * in1,

SQLUDF_DOUBLE * in2,

SQLUDF_DOUBLE * outProduct,

SQLUDF_NULLIND * in1NullInd,

SQLUDF_NULLIND * in2NullInd,

SQLUDF_NULLIND * productNullInd,

SQLUDF_TRAIL_ARGS)

{

* outProduct =(* in1)*(* in2);

return(0);

}

此UDF的相应CREATE FUNCTION语句如下:

CREATE FUNCTION product(double in1,double in2)

RETURNS double

LANGUAGE c

PARAMETER STYLE sql

NO SQL

FENCED THREADSAFE

DETERMINISTIC
空输入时返回NULL

无外部动作

外部名称?udfsrv!产品?

I have successfully compiled the following UDF sample for DB2 8.1 on AIX
4.3.3. When I try to ''db2 define function'' command below, I get the
following errors:

DB21034E The command was processed as an SQL statement because it was
not a valid Command Line Processor command. During SQL processing it
returned:
SQL0204N "IN1" is an undefined name. LINE NUMBER=1. SQLSTATE=42704

Do I need to run bind?

my library is /home/maddev/sqllib/function/udfsrv
I see that .product is compiled when I dump out that file:

[83] m 0x10000a90 1 1 0x02 0x0020 .product
[84] a4 0x00000045 0 0 2 0 0 0

From Application Development Guide:
--------------------------------------------------------------------------
The following is an example of a C/C++ UDF that returns the product of
its two input arguments:

SQL_API_RC SQL_API_FN product ( SQLUDF_DOUBLE *in1,
SQLUDF_DOUBLE *in2,
SQLUDF_DOUBLE *outProduct,
SQLUDF_NULLIND *in1NullInd,
SQLUDF_NULLIND *in2NullInd,
SQLUDF_NULLIND *productNullInd,
SQLUDF_TRAIL_ARGS )
{
*outProduct = (*in1) * (*in2);
return (0);
}
The corresponding CREATE FUNCTION statement for this UDF is as follows:
CREATE FUNCTION product( double in1, double in2 )
RETURNS double
LANGUAGE c
PARAMETER STYLE sql
NO SQL
FENCED THREADSAFE
DETERMINISTIC
RETURNS NULL ON NULL INPUT
NO EXTERNAL ACTION
EXTERNAL NAME ?udfsrv!product?

推荐答案

John Rigler写道:
John Rigler wrote:
我已经在AIX上为DB2 8.1成功编译了以下UDF示例
4.3.3。当我尝试下面的db2 define function命令时,我得到以下错误:

DB21034E该命令作为SQL语句处理,因为它不是一个有效的命令行处理器命令。在SQL处理期间它返回:
SQL0204N" IN1"是一个未定义的名称。 LINE NUMBER = 1。 SQLSTATE = 42704


此UDF的相应CREATE FUNCTION语句如下:
CREATE FUNCTION product(double in1,double in2)
返回双语
语言c
PARAMETER STYLE sql
NO SQL
FENCED THREADSAFE
DETERMINISTIC
在NULL输入上返回NULL
NO外部行动
外部名称?udfsrv!产品?
I have successfully compiled the following UDF sample for DB2 8.1 on AIX
4.3.3. When I try to ''db2 define function'' command below, I get the
following errors:

DB21034E The command was processed as an SQL statement because it
was not a valid Command Line Processor command. During SQL processing
it returned:
SQL0204N "IN1" is an undefined name. LINE NUMBER=1. SQLSTATE=42704

[...]

The corresponding CREATE FUNCTION statement for this UDF is as follows:
CREATE FUNCTION product( double in1, double in2 )
RETURNS double
LANGUAGE c
PARAMETER STYLE sql
NO SQL
FENCED THREADSAFE
DETERMINISTIC
RETURNS NULL ON NULL INPUT
NO EXTERNAL ACTION
EXTERNAL NAME ?udfsrv!product?



CREATE FUNCTION应该只有参数的数据类型,

不是名称。如:


CREATE FUNCTION产品(双倍,双倍)

...

祝你好运,


----- =通过Newsfeeds.Com发布,未经审查的Usenet新闻= -----
http://www.newsfeeds.com - 世界排名第一的新闻组服务!

----- ==超过100,000个新闻组 - 19种不同的服务器= -----


The CREATE FUNCTION should only have the data types for the arguments,
not names. As in:

CREATE FUNCTION product(double, double)
...
Good luck,

-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
-----== Over 100,000 Newsgroups - 19 Different Servers! =-----


John Rigler写道:
John Rigler wrote:
我已经在AIX上为DB2 8.1成功编译了以下UDF示例
4.3.3。当我尝试下面的db2 define function命令时,我得到以下错误:

DB21034E该命令作为SQL语句处理,因为它不是一个有效的命令行处理器命令。在SQL处理期间它返回:
SQL0204N" IN1"是一个未定义的名称。 LINE NUMBER = 1。 SQLSTATE = 42704


此UDF的相应CREATE FUNCTION语句如下:
CREATE FUNCTION product(double in1,double in2)
返回双语
语言c
PARAMETER STYLE sql
NO SQL
FENCED THREADSAFE
DETERMINISTIC
在NULL输入上返回NULL
NO外部行动
外部名称?udfsrv!产品?
I have successfully compiled the following UDF sample for DB2 8.1 on AIX
4.3.3. When I try to ''db2 define function'' command below, I get the
following errors:

DB21034E The command was processed as an SQL statement because it
was not a valid Command Line Processor command. During SQL processing
it returned:
SQL0204N "IN1" is an undefined name. LINE NUMBER=1. SQLSTATE=42704

[...]

The corresponding CREATE FUNCTION statement for this UDF is as follows:
CREATE FUNCTION product( double in1, double in2 )
RETURNS double
LANGUAGE c
PARAMETER STYLE sql
NO SQL
FENCED THREADSAFE
DETERMINISTIC
RETURNS NULL ON NULL INPUT
NO EXTERNAL ACTION
EXTERNAL NAME ?udfsrv!product?



CREATE FUNCTION应该只有参数的数据类型,

不是名称。如:


CREATE FUNCTION产品(双倍,双倍)

...

祝你好运,


----- =通过Newsfeeds.Com发布,未经审查的Usenet新闻= -----
http://www.newsfeeds.com - 世界排名第一的新闻组服务!

----- ==超过100,000个新闻组 - 19种不同的服务器= -----


The CREATE FUNCTION should only have the data types for the arguments,
not names. As in:

CREATE FUNCTION product(double, double)
...
Good luck,

-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
-----== Over 100,000 Newsgroups - 19 Different Servers! =-----


实际上外部UDF可选择支持参数命名。

问题是OP混淆了顺序:

错误:CREATE FUNCTION产品(双in1,双in2)

正确:CREATE FUNCTION产品(in1 double,in2 double)

(除非当然OP有UDT in1和in2 ..但是他再次有了

a重复的参数名称DOUBLE ;-)


这些名字被加入了V7.1 GA随着SQL函数的出现。


干杯

Serge

-

Serge Rielau

DB2 SQL编译器开发

IBM多伦多实验室
Actually external UDF support the naming of parameters optionally.
Teh problem is that the OP confused the order:
Wrong: CREATE FUNCTION product( double in1, double in2 )
Correct: CREATE FUNCTION product( in1 double, in2 double )
(unless of course the OP has UDT in1 and in2.. but then again he''d have
a duplicate parameter name DOUBLE ;-)

The names were added in V7.1 GA with teh advent of SQL Functions.

Cheers
Serge
--
Serge Rielau
DB2 SQL Compiler Development
IBM Toronto Lab


这篇关于从“应用程序开发指南”定义外部(C)UDF示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆