如何在java中调用不带参数的PL/SQL函数

Posted

技术标签:

【中文标题】如何在java中调用不带参数的PL/SQL函数【英文标题】:How to call PL/SQL function without parameters in java 【发布时间】:2016-05-24 08:11:23 【问题描述】:

我有一个函数,它返回 VARCHAR,但启动时没有参数,它看起来像这样:

create or replace 
FUNCTION stosunek_platnosci RETURN VARCHAR
IS
liczba_oplaconych NUMBER;
liczba_nieoplaconych NUMBER;
komentarz Varchar(135);
oplacone Varchar(1) := 'T';
begin
 Select count(*) into liczba_oplaconych from rezerwacje where platnosc_dokonana = oplacone; 
 Select count(*) into liczba_nieoplaconych from rezerwacje where platnosc_dokonana != oplacone; 
 if liczba_oplaconych > liczba_nieoplaconych then           
    komentarz:= 'Obecnie klienci w większości opłacili swoje rezerwacje.';
 elsif liczba_oplaconych < liczba_nieoplaconych then            
    komentarz:= 'Obecnie klienci w większości nie opłacili swoich rezerwacji.';
 else
    komentarz:= 'W bazie jest tyle samo opłaconych i nieopłaconych rezerwacji.';
 end if;
RETURN komentarz;
end;

然后这样称呼它:

try 
        callStmt = connection.prepareCall("stosunek_platnosci();");
        callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
        callStmt.execute();
        jTextField1.setText(callStmt.getString(1));
     catch (SQLException ex) 
        Logger.getLogger(Stats.class.getName()).log(Level.SEVERE, null, ex);
    

最后还是不行……你能帮帮我吗?

【问题讨论】:

错误是什么? 您可以在底部查看问题,也许它会有所帮助。 Call pl/sql function in java? 错误是:java.sql.SQLException: Invalid column index 【参考方案1】:

这样做

create or replace 
FUNCTION xyz RETURN VARCHAR
IS
k Varchar(135);
begin
    k:= 'abc';
RETURN k;
end;

    CallableStatement call = conn.prepareCall("? = call xyz()");
    call.registerOutParameter(1, java.sql.Types.VARCHAR);
    call.executeUpdate();
    System.out.println(call.getString(1));

见https://docs.oracle.com/cd/F49540_01/DOC/java.815/a64686/04_call5.htm

【讨论】:

很高兴知道 :-)

以上是关于如何在java中调用不带参数的PL/SQL函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用参数从 Oracle PL/SQL 执行 Java jar 文件?

如何在javascript中调用pl/sql过程和函数?

如何通过 Java EntityManager 调用 PL/SQL 存储函数

如何在Oracle中仅将列用作1行到1行返回pl / sql函数中的参数

如何调用具有 IN/OUT 参数并通过 DB Link 返回 BLOB 的 Oracle PL/SQL 函数

如何在调用之前检查 Java Web 服务是不是已在 PL/SQL 中启动并运行