直接使用java在Oracle数据库中创建函数

Posted

技术标签:

【中文标题】直接使用java在Oracle数据库中创建函数【英文标题】:Creating function in an Oracle database using java directly 【发布时间】:2011-05-05 14:48:12 【问题描述】:

我知道可以使用 CREATE JAVA 命令在 oracle 数据库中创建 java 函数 - 看here。我已经阅读了很多关于如何做到这一点的内容,但似乎阅读的越多,阅读的内容就越多。

我想做的很简单。由于我已经非常熟悉 Java,我不想通过学习 PL/SQL 尤其是我正在从事的项目相当小。我也不想过多地使用此功能,我想做的只是如下所示:

1) 在连接到数据库时声明一个函数,例如:

CREATE JAVA AS 
    public class Example
        public static bool returnTrue() 
            return true;
        
    

2) 然后在连接时调用函数:

SELECT Example.returnTrue() FROM DUAL;

这可能吗? 怎么样?

【问题讨论】:

为什么不学习 SQL 以在没有不必要的基础架构的情况下执行该功能? 【参考方案1】:

不是直接可以的,还需要一步:

(请注意,您不能在 SQL 可调用函数中返回布尔类型。您必须返回有效的 Oracle SQL 类型,在本例中为字符串)。

创建你的函数:

create or replace and compile java source named returntrue as
public class example
 public static String returnTrue()  return "TRUE";  ;

您必须创建一个 PL/SQL“包装器”来连接 java 函数和 PL/SQL:

SQL>     CREATE OR REPLACE FUNCTION returnTrue
  2      RETURN VARCHAR2
  3      AS LANGUAGE JAVA
  4      NAME 'example.returnTrue() return java.lang.String';
  5  /


Function created

SQL> select returntrue from dual;

RETURNTRUE
--------------------------------------------------------------------------------
TRUE

更多信息请关注Oracle documentation。

【讨论】:

【参考方案2】:

您对甲骨文的投入程度如何?如果答案介于“相当数量”和“我的生活取决于它”之间,请学习 PL/SQL。在某些方面,它是一种奇怪的语言,但它做得很好,那就是在 SQL 之上提供了一个过程层。如果您的代码所做的比“SQL 之上的过程层”更深入或更复杂,那么您根本不应该使用存储过程。运行您自己的 JVM 并在需要时使用 JDBC。

【讨论】:

以上是关于直接使用java在Oracle数据库中创建函数的主要内容,如果未能解决你的问题,请参考以下文章

使用vb.net在oracle中创建函数[重复]

Oracle中创建了索引,啥样的原因可能使索引不能正常使用?

Oracle 12.1 从带有函数的选择中创建文本数据

在 h2 中创建枢轴

在 Oracle 中创建函数时出现 PLS-00103 错误

是否可以在 SQL Server 中创建一个可以处理序列的函数?