oracle - Oracle PL/SQL SELECT INTO 子句认为它需要另一个 INTO
问题描述
我有一个简单的测试函数,我在其中传递一个特定的 ID(我从中选择的表的主键),并在其上计算一个简单的函数和参数。
骨架代码和测试:
create or replace function test(id varchar2, area float) return float is
theRow forest%ROWTYPE;
begin
select * into theRow from forest where Forest_No = id;
return area / theRow.Area;
end;
begin
select test('1', 16000) from dual;
end;
输出:
[2019-10-14 21:19:10] [65000][6550] ORA-06550: line 2, column 5:
[2019-10-14 21:19:10] PLS-00428: an INTO clause is expected in this SELECT statement
我不知道在这里做什么,据我所知,文档和示例使用相同的顺序和语法。我曾尝试像在 Postgresql 中那样将 into 子句移到末尾,但这没有用。
我在这里错过了什么?
解决方案
问题在于调用语句。
每当select
在 plsql 块中使用语句时,它必须有into
子句将返回值分配给变量。
您应该从调用代码中删除begin
and :end
--begin -- remove this
select test('1', 16000) from dual;
--end; -- remove this
或者,如果您想在 plsql 块中使用它,请添加 into 子句:
Declare
Area_ float(precision);
begin
select test('1', 16000) into area_ from dual;
-- use area_ in your code wherever required
dbms_output.put_line('area: ' || area_);
end;
干杯!!
推荐阅读
- php - PHP在没有JS的情况下将数据发送到模态
- flutter - 如何检查用户的地址是否在我的区域内或不使用颤振中的地图。我想为特定区域的用户提供服务
- python - 修改代码以便能够向我的字典添加另一个值
- python - 通过并行利用 GPU 和 CPU 执行两个基于 TensorFlow 的算法
- angular - 如何更改角垫对话框背景颜色?
- excel - 我在 excel 中有 3 个时间段 - 我需要知道最长连续时间段的持续时间
- sql - 使用 JSON_MODIFY 更新/替换数组
- authentication - django rest框架中的两种不同模型
- c++ - QVideoFrame::map 在 Ubuntu Touch 上失败
- c# - 尝试从 IIS ftp 服务器下载 jpg 时,ContentLength 返回 -1