sql - 这个简单的 (Oracle) SQL 存储过程代码有什么问题?

标签 sql oracle stored-procedures

我在网上查看了很多教程,我看到很多类似的问题都没有回答我的问题,因为它们使用不同的 SQL 实现。我正在使用 SQLPlus,oracle 10g。

CREATE OR REPLACE PROCEDURE getuserid
(uname in varchar) AS
BEGIN
select accountId from "ValidClients"
where username = uname
END getuserid;

代码 'SELECT accountId from "ValidClients"WHERE username = 'testname' ; ' 工作正常,所以我无法理解我做错了什么让 SQLPlus 给我一个编译错误。

编辑:没有 INTO 子句是答案,感谢所有帮助过的人。一方面问题解决了,我可以要求确认一下:一个ja​​va程序将调用这些存储过程并尝试将它们存储在结果集中。下面的代码对上面的存储过程能正常工作吗?
CallableStatement cs = connection.prepareCall("{call getuserid(?)}");
cs.setString(1, user);
ResultSet rs = cs.executeQuery();

int userid = Integer.parseInt(rs.getString(1));

EDIT2:忽略上述内容,它是为后代保留的。它不仅足以解决自己的问题,而且可以通过 Google 搜索轻松解决,不需要定制答案。

最佳答案

你把查询的结果放在哪里?假设 accountId 是一个数字,您可以尝试:

CREATE OR REPLACE PROCEDURE getuserid
(uname_p in varchar, accountId_p out NUMBER) AS
BEGIN
select accountId into accountId_p from "ValidClients"
where username = uname_p;
END getuserid;

问候

关于sql - 这个简单的 (Oracle) SQL 存储过程代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7753903/

相关文章:

SQL Server 临时表与游标

mysql - 按同一分组计算 2 列

python - 在数据库中实现匹配

sql - 如何将 MDF 文件附加到具有相同 LDF 名称的服务器?

azure - CosmosDB 存储过程不返回所有文档

php - PDO BindParam 捷径?

php - 确定为什么相同的查询在 phpMyAdmin 中返回结果,但在 PHP 中运行时却不然

sql - 在oracle中连接值

sql - PL/SQL和SQL中VARCHAR2的最大大小是多少?

c# - C# 中的 Oracle 参数化查询