Oracle PL/SQL SELECT INTO 子句认为它需要另一个 INTO
Oracle PL/SQL SELECT INTO clause thinks it needs another INTO
我有一个简单的测试函数,我在其中传递一个特定的 ID(我从中选择的 table 的主键),并计算一个简单的函数和参数。
框架代码和测试:
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 子句移动到末尾,但这没有用。
我错过了什么?
问题出在调用语句中。
每当在 plsql 块中使用 select
语句时,它必须有 into
子句才能将 return 值分配给变量。
您应该从调用代码中删除 begin
和 end
:
--begin -- remove this
select test('1', 16000) from dual;
--end; -- remove this
或者如果你想在 plsql 块中使用它然后添加到子句中:
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;
干杯!!
我有一个简单的测试函数,我在其中传递一个特定的 ID(我从中选择的 table 的主键),并计算一个简单的函数和参数。
框架代码和测试:
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 子句移动到末尾,但这没有用。
我错过了什么?
问题出在调用语句中。
每当在 plsql 块中使用 select
语句时,它必须有 into
子句才能将 return 值分配给变量。
您应该从调用代码中删除 begin
和 end
:
--begin -- remove this
select test('1', 16000) from dual;
--end; -- remove this
或者如果你想在 plsql 块中使用它然后添加到子句中:
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;
干杯!!