Oracle 显示编译错误的PlSQL

Oracle 显示编译错误的PlSQL,oracle,plsql,syntax-error,Oracle,Plsql,Syntax Error,PL/SQL显示编译错误。函数工作正常且已成功编译,但若运行pl/sql查询,则显示编译 CREATE OR REPLACE FUNCTION f( num IN NUMBER, num2 IN NUMBER, ans OUT NUMBER ) RETURN number IS BEGIN ans := num + num2; RETURN ans; END; CREATE table add1(val1 number(2),val2 number(

PL/SQL显示编译错误。函数工作正常且已成功编译,但若运行pl/sql查询,则显示编译

CREATE OR REPLACE FUNCTION f(
   num  IN  NUMBER,
   num2 IN  NUMBER,
   ans  OUT NUMBER 
) RETURN number IS 
BEGIN 
  ans := num + num2;
  RETURN ans;
END;

CREATE table add1(val1  number(2),val2  number(1),ans  number(3));

SET SERVEROUTPUT ON ;

DECLARE 
  a1  add1.val1%TYPE;
  b1  add1.val2%TYPE;
  sum add1.ans%TYPE;
BEGIN
  WHILE a1!=-99
  LOOP
    a1 := &a1;
    b1 := &b1;
    sum := f(a1, b1, sum);
    INSERT INTO add1 VALUES(a1, b1, c1);
  END LOOP;
END;

不能使用IN和OUT IN函数。只有在程序上。正确的做法是:

   create or replace function f(
       num  number,
       num2 number 
    ) return number is 
    ans number;
    begin 
      ans := num + num2;
      return ans;
    end;

哦,孩子!代码中的错误太多。也许你应该描述一下你想用这些东西做什么。

你不能在函数中使用IN和OUT。只有在程序上。正确的做法是:

   create or replace function f(
       num  number,
       num2 number 
    ) return number is 
    ans number;
    begin 
      ans := num + num2;
      return ans;
    end;

哦,孩子!代码中的错误太多。也许你应该描述一下你想用这些东西做什么。

我已经用sum替换了insert查询中的c1,但仍然是编译错误,,,
PL/SQL显示编译错误。
。错误(代码、消息)在哪里?事实上,有很多错误:1)您试图使用
c1
变量,但尚未声明它;2)
sum
是PL/SQL保留字。因此,您可以更改(推荐)变量的名称,或者将
sum
括在双引号中(千万不要这样做)。旁注:尽量不要编写通过组合
return
语句和一个或多个
out
参数向调用程序返回多个值的函数。谢谢@NicholasKrasnov,我明白了你的意思。现在可以工作了,,,:)我已经用sum替换了insert查询中的c1,但仍然是编译错误,,,
PL/SQL显示编译错误
。错误(代码、消息)在哪里?事实上,有很多错误:1)您试图使用
c1
变量,但尚未声明它;2)
sum
是PL/SQL保留字。因此,您可以更改(推荐)变量的名称,或者将
sum
括在双引号中(千万不要这样做)。旁注:尽量不要编写通过组合
return
语句和一个或多个
out
参数向调用程序返回多个值的函数。谢谢@NicholasKrasnov,我明白了你的意思。现在它正在工作,,,:)
你不能在函数中使用IN和out
不是真的。这是允许的。唯一的限制是,您不能在SQL中使用该函数,但在PL/SQL中,请继续使用它,尽管这是一个非常非常糟糕的做法。我的糟糕,我不知道。尽管我仍然看不到在PL/SQL中使用带OUT参数的函数而不是带OUT参数的过程的原因。
您不能使用in和OUT in函数
不正确。这是允许的。唯一的限制是,您不能在SQL中使用该函数,但在PL/SQL中,请继续使用它,尽管这是一个非常非常糟糕的做法。我的糟糕,我不知道。尽管我仍然不明白在PL/SQL中使用带OUT参数的函数而不是带OUT参数的过程的原因。