gpt4 book ai didi

java - Oracle 不是有效的函数或过程名称

转载 作者:行者123 更新时间:2023-11-30 04:06:48 29 4
gpt4 key购买 nike

我已经编译了以下 JAVA 类并将其加载到数据库中。

import java.sql.*;
import java.io.*;

public class BeerBeer {
// Edit to return ResultSet
public static String getBreweryInfo (int Raz_ID)
throws SQLException
{
String sql =
"SELECT Nosaukums FROM Alus_razotaji WHERE ID = ?";//vaicajums
String toReturn = "";
try {
Connection conn = DriverManager.getConnection("jdbc:default:connection:");
PreparedStatement apstmt = conn.prepareStatement(sql);
apstmt.setInt(1, Raz_ID);
ResultSet rset = apstmt.executeQuery();// SQL vaicājuma izpildīšana
if (rset.next()) {
toReturn = rset.getString(1);
rset.close();
apstmt.close();
return toReturn;
}else{
return toReturn;
}
}
catch (SQLException e) {
System.err.println(e.getMessage()); //Kļūdu izvadīsana
toReturn = "Exx";
return toReturn;
}
}
}

我制作了一个与 Java 方法调用关联的 PL/SQL 包。

 CREATE OR REPLACE PACKAGE BeerBeer AS
FUNCTION getBreweryInfo(Raz_ID number) RETURN varchar2;
END BeerBeer;

CREATE OR REPLACE PACKAGE BODY BeerBeer AS
FUNCTION getBreweryInfo(Raz_ID number) RETURN varchar2 AS Language Java
NAME 'BeerBeer.getBreweryInfo(int) return java.lang.String';
END BeerBeer;

当我尝试通过以下方式调用该函数时:CALL BeerBeer.getBreweryInfo(3) 我收到错误:不是有效的函数或过程名称。

可能出了什么问题?

最佳答案

您已在包中创建了一个函数,但您试图将其作为过程来调用。没有名为 getBreweryInfo 的过程,只有一个函数。返回值必须去某个地方。

假设这是从 Java 调用的,调用 in my earlier answer仍然适用 - 您需要一个返回值的占位符,注册为输出参数。

如果您从 SQL*Plus 测试它,您可以执行以下操作:

var razotaji varchar2(80);
exec :razotaji := beerbeer.getBreweryInfo(3);
print razotaji

或者在 PL/SQL block 中:

set serveroutput on
declare
razotaji varchar2(80);
razotaji := beerbeer.getBreweryInfo(3);
dbms_output(razotaji);
end;
/

@rgettman 的建议也应该有效:

select BeerBeer.getBreweryInfo(3) from dual;

您所说的错误消息:

ORA-00904 "BeerBeer"."GetBreweryInfo" invalid identifier

表明您没有完全按照建议进行操作,而是将标识符用双引号括起来,否则消息中的标识符将是大写的。 Oracle 仅对带引号的标识符区分大小写。由于您(正确地)在创建包时没有引用标识符,因此在调用它时不应引用它们。所以这对于您的定义是错误的:

select "BeerBeer"."GetBreweryInfo"(3) from dual;

关于java - Oracle 不是有效的函数或过程名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573385/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com