Sql 错误-PLS-00103:遇到符号“选择”
我试图在一个代码块中创建和使用一个函数。该函数工作正常,但当我尝试在下面使用select语句时,oracle会给我一个错误。select语句在单独的块中运行时返回所需的内容Sql 错误-PLS-00103:遇到符号“选择”,sql,oracle,oracle11g,stored-functions,Sql,Oracle,Oracle11g,Stored Functions,我试图在一个代码块中创建和使用一个函数。该函数工作正常,但当我尝试在下面使用select语句时,oracle会给我一个错误。select语句在单独的块中运行时返回所需的内容 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 f
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或其他类型的工具
首先,在函数代码之后直接使用SELECT语句的要求是什么
函数是存储的代码,您可以在任何地方调用它们
现在,回答你的问题
只需选择光标左键单击并拖动最后3行,即select语句并执行它们。它将单独工作。
使用函数ends的斜杠/after代码将其作为pl/sql代码的终点。
在您的情况下,您的工具无法识别函数代码的结束位置
而且您不必担心这样的问题,因为一旦创建函数代码,它们就会存储在元数据中。无论何时调用该函数,Oracle都将使用元数据中的代码来执行其逻辑
我建议在函数的创建和使用之间进行完全隔离。i、 e.从一个窗口创建函数,并在成功创建后关闭该窗口
然后,您只能在任何工具窗口中执行select语句
干杯 也许您想要的是一个,而不是一个单独声明的 设置:
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;
演示:
如果这是您想要的,则值得更新您的问题标题以便于其他人查找。函数中未使用参数p\u shopper\u ID。您的函数未使用传入的购物者ID,顺便说一句,我无法在中重现您的错误。它在Oracle11g和18c上都可以正常工作。在函数代码的末尾和SELECT语句之前,一行中的斜杠本身缺失了。
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.