【发布时间】:2021-08-06 10:08:00
【问题描述】:
这是我的桌子
CREATE TABLE accounts (
accountid VARCHAR(255),
name VARCHAR2(255),
phone_number INTEGER,
email_addresses VARCHAR2(255),
account_number VARCHAR(255),
password VARCHAR2(255)
);
现在我创建了一个程序
create or replace PROCEDURE getaccount (
param1 IN VARCHAR2
) AS
BEGIN
DBMS_OUTPUT.PUT_LINE(' SELECT
accountid,
password
FROM
accounts
WHERE
account_number = '||param1) ;
END getaccount;
以及我们使用 || 的原因或运算符
第二个我在 SQLDEVELOPER 中运行这段代码 我明白了
call getaccount('123456');
Call completed.
收到此消息
现在我正在连接到 JAVA 这是我的 JAVA 代码
CallableStatement pst = Get.connection().prepareCall("{call getAccount(?)}");
pst.setString(1, Number);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
System.out.println(rs.getString(1));
这里 Get.connection 返回连接。
运行后我得到这个错误
Enter Account Number : 123456
java.sql.SQLException: Cannot perform fetch on a PLSQL statement: next
at ojdbc10/oracle.jdbc.driver.InsensitiveScrollableResultSet.next(InsensitiveScrollableResultSet.java:409)
at bank.services.SignValidator.getBank(SignValidator.java:20)
at bank.services.KingobankMain.getBank(KingobankMain.java:49)
at bank.services.KingobankMain.main(KingobankMain.java:14)
【问题讨论】:
-
另外,您需要清楚地了解 dbms_output 确实不写入屏幕。事实上,PL/SQL 完全在服务器内处理,并且无法访问屏幕。 DBMS_OUTPUT 仅写入缓冲区,然后仅在过程完成时返回给调用者(sqlplus 等)。然后由该调用者处理和显示该缓冲区的内容。一些调用者完全忽略它,其他调用者(如 sqlplus)只有在使用正确的 SET 命令指示这样做时才会处理它。