错误 - PLS-00103:遇到符号 "SELECT"
Error - PLS-00103: Encountered the symbol "SELECT"
我正在尝试在单个代码块中创建和使用一个函数。该函数工作正常,但是当我尝试在下面使用 select 语句时,oracle 给我一个错误。 select声明returns我想要什么的时候我运行它在一个单独的块中。
CREATE OR REPLACE FUNCTION TOT_PURCH_SF
(p_shopper_ID IN number)
RETURN NUMBER
AS
lv_sum NUMBER;
BEGIN
SELECT SUM(TOTAL)
into lv_sum
from bb_basket;
RETURN lv_sum;
END;
SELECT TOT_PURCH_SF(23) tot_purch
FROM BB_SHOPPER
WHERE idshopper = 23;
我期望输出是546.86,而且是当select语句分别是运行时,但是当我运行它在函数下面时错误显示。
我认为您正在使用 sql-developer
或其他类型的 tool
。
首先在function
代码后直接使用SELECT
语句有什么要求?
Functions
是存储的代码,您可以从任何地方调用它们。
现在,回答你的问题。
- 只需 select(光标左键单击并拖动)最后 3 行(即
select
语句)并执行它们。它将单独工作。
- 在
function
代码结束后使用 slash
(/
) 使其成为 pl/sql 代码的终点。
在您的情况下,您的 tool
无法识别 function
代码的结束位置。
而且您不必担心 function
代码一旦创建就存储在元数据中。每当您调用该函数时,Oracle 都会使用元数据中的代码来执行其逻辑。
我建议完全隔离 function
的创建和使用。即从一个 window 创建函数并在成功创建后关闭 window。
然后您可以在任何 if 工具 windows.
中仅执行 select
语句
干杯!!
也许您想要的是 inline function in a WITH clause,而不是单独声明的。
设置:
create table bb_shopper
( idshopper integer primary key );
create table bb_basket
( idshopper references bb_shopper
, total number );
insert all
into bb_shopper values (23)
into bb_basket values (23, 1)
into bb_basket values (23, 2)
into bb_basket values (23, 3)
select null from dual;
演示:
with function tot_purch_sf
( p_shopper_id in bb_shopper.idshopper%type )
return number
as
lv_sum number;
begin
select sum(total) into lv_sum
from bb_basket
where idshopper = p_shopper_id;
return lv_sum;
end;
select tot_purch_sf(23) tot_purch
from bb_shopper
where idshopper = 23
/
TOT_PURCH
----------
6
1 row selected.
如果这是你想要的,那么更新你的问题标题是值得的,以便其他人更容易找到它。
我正在尝试在单个代码块中创建和使用一个函数。该函数工作正常,但是当我尝试在下面使用 select 语句时,oracle 给我一个错误。 select声明returns我想要什么的时候我运行它在一个单独的块中。
CREATE OR REPLACE FUNCTION TOT_PURCH_SF
(p_shopper_ID IN number)
RETURN NUMBER
AS
lv_sum NUMBER;
BEGIN
SELECT SUM(TOTAL)
into lv_sum
from bb_basket;
RETURN lv_sum;
END;
SELECT TOT_PURCH_SF(23) tot_purch
FROM BB_SHOPPER
WHERE idshopper = 23;
我期望输出是546.86,而且是当select语句分别是运行时,但是当我运行它在函数下面时错误显示。
我认为您正在使用 sql-developer
或其他类型的 tool
。
首先在function
代码后直接使用SELECT
语句有什么要求?
Functions
是存储的代码,您可以从任何地方调用它们。
现在,回答你的问题。
- 只需 select(光标左键单击并拖动)最后 3 行(即
select
语句)并执行它们。它将单独工作。 - 在
function
代码结束后使用slash
(/
) 使其成为 pl/sql 代码的终点。
在您的情况下,您的 tool
无法识别 function
代码的结束位置。
而且您不必担心 function
代码一旦创建就存储在元数据中。每当您调用该函数时,Oracle 都会使用元数据中的代码来执行其逻辑。
我建议完全隔离 function
的创建和使用。即从一个 window 创建函数并在成功创建后关闭 window。
然后您可以在任何 if 工具 windows.
中仅执行select
语句
干杯!!
也许您想要的是 inline function in a WITH clause,而不是单独声明的。
设置:
create table bb_shopper
( idshopper integer primary key );
create table bb_basket
( idshopper references bb_shopper
, total number );
insert all
into bb_shopper values (23)
into bb_basket values (23, 1)
into bb_basket values (23, 2)
into bb_basket values (23, 3)
select null from dual;
演示:
with function tot_purch_sf
( p_shopper_id in bb_shopper.idshopper%type )
return number
as
lv_sum number;
begin
select sum(total) into lv_sum
from bb_basket
where idshopper = p_shopper_id;
return lv_sum;
end;
select tot_purch_sf(23) tot_purch
from bb_shopper
where idshopper = 23
/
TOT_PURCH
----------
6
1 row selected.
如果这是你想要的,那么更新你的问题标题是值得的,以便其他人更容易找到它。