如何在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 文件?
如何通过 Java EntityManager 调用 PL/SQL 存储函数
如何在Oracle中仅将列用作1行到1行返回pl / sql函数中的参数