为什么pi()函数在Oracle中使用其JDBC驱动程序不起作用?

时间:2016-11-28 12:49:24

标签: oracle jdbc

查询1适用于Oracle JDBC驱动程序,但查询2则不行。我不明白为什么。拜托,有人可以帮助我吗?

查询1:

SELECT {fn pi()} FROM table;

查询2:

SELECT pi() FROM table;

3 个答案:

答案 0 :(得分:4)

Oracle中没有本地pi()函数。 JDBC驱动程序将简单地用硬编码值替换它。

如果你跑

SELECT {fn pi()} FROM dual;

司机将发送:

SELECT ( 3.141592653589793238462643383279502884197169399375 ) 
FROM
 dual

到服务器 - 这就是为什么你可以使用{fn pi()}对抗Oracle数据库的原因,即使没有这样的功能。

答案 1 :(得分:0)

似乎没有任何名为PI的native function。该错误表明您尚未创建用户定义的函数。

{fn foo()}语法为provided by JDBC,因此如果没有它,则无效:

  

fn关键字

的JDBC转义语法      

您可以使用fn在JDBC转义语法中指定函数   关键词。语法

{fn functionCall}
     

其中functionCall是列出的标量函数之一的名称   下方。

...并且在上一个链接之后,我们可以看到底层的PI()函数是由Java DB和/或Apache Derby提供的。

答案 2 :(得分:0)

您可以使用以下等式:

select 2*asin(1) from dual;

或者可以定义一个返回该数字的函数,如下所示:

create or replace function PI return numeric is
  Result numeric;
begin
  select 2*asin(1)
  into Result  from dual;
  return(Result);
end PI;
相关问题