Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 错误-PLS-00103:遇到符号“选择”_Sql_Oracle_Oracle11g_Stored Functions - Fatal编程技术网

Sql 错误-PLS-00103:遇到符号“选择”

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

我试图在一个代码块中创建和使用一个函数。该函数工作正常,但当我尝试在下面使用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
    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.