Java Oracle 中的字符串参数 sql 开发人员

Java String parameter in Oracle sql developer

我必须在 Oracle SQL Developer 中使用一些 java 函数。但是我在使用 java String 参数时遇到了一些麻烦。我知道我的代码对这个字符串没有任何作用。会的。

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "StringTest" AS
public class StringTest
{ 
    public static int test(String a)
    {
        return 1;
    }
}
/

哪个returns:

Java Source StringTest created

然后:

CREATE OR REPLACE FUNCTION F_STRING(input1 in char) return number
as LANGUAGE JAVA NAME 'StringTest.test(String) return int';

Function F_STRING compiled

现在当我尝试执行我的函数时:

SELECT F_STRING("some_text") FROM MyTable;

ORA-00904: "some_text": invalid identifier

  1. 00000 - "%s: invalid identifier"

当我尝试使用单引号而不是 " 时,我得到了这个:

ORA-29531: no method test in class StringTest 29531. 00000 - "no method %s in class %s" *Cause: An attempt was made to execute a non-existent method in a Java class. *Action: Adjust the call or create the specified method.

当我使用 varchar2 而不是 char 时,同样的事情发生了。 我确定我遗漏了一些非常简单的东西,但是几个小时都找不到解决方案,这已经让我发疯了。

当您在 Oracle 中发布 java 方法时,您必须使用完整的 class 名称。 (规范名称)。

int - 没问题, String - 不行。

改变这个

CREATE OR REPLACE FUNCTION F_STRING(input1 in char) return number
    as LANGUAGE JAVA NAME 'StringTest.test(String) return int';

到此。

CREATE OR REPLACE FUNCTION F_STRING(java.lang.String in char) return number
as LANGUAGE JAVA NAME 'StringTest.test(java.lang.String) return int';

Oracle 不允许 String 使用 java.lang.String

..还有

不要过度使用 " 符号,因为这会强制您对对象使用精确的大小写调用,因为这对于 java 源来说不是一个大问题,它可能与其他对象有关。

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED stringtest AS
public class StringTest
{
    public static int test(String a)
    {
        return 1;
    }
}


CREATE OR REPLACE FUNCTION F_STRING(input1 in char) return number
as LANGUAGE JAVA NAME 'StringTest.test(java.lang.String) return java.lang.Intiger';


SELECT F_STRING('some_text') FROM dual;