查询1适用于Oracle JDBC驱动程序,但查询2则不行。我不明白为什么。拜托,有人可以帮助我吗?
查询1:
SELECT {fn pi()} FROM table;
查询2:
SELECT pi() FROM table;
答案 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;