2

这是我的代码:

CREATE OR REPLACE FUNCTION customer_city_function(city_in IN VARCHAR2)
RETURN NUMBER
AS
  number_cus NUMBER := 0;

  CURSOR cus_cur IS
    SELECT COUNT(*)
      FROM customer
     WHERE customer_city = city_in;
BEGIN
  IF city_in IS NOT NULL THEN
    OPEN cus_cur;
    FETCH cus_cur INTO number_cus;
    CLOSE cus_cur;
  END IF;

  RETURN number_cus;
END;
/

这是警告:

Error starting at line : 1 in command -
CREATE OR REPLACE FUNCTION customer_city_function(city_in IN VARCHAR2)
RETURN NUMBER
AS
  number_cus NUMBER := 0
Error report -
SQL Command: functıon CUSTOMER_CITY_FUNCTION
Failed: Warning: executing is completed with a warning


Error starting at line : 5 in command -
CURSOR cur_cur IS
Error report -
Unknown Command


Error starting at line : 6 in command -
SELECT COUNT(*)
    FROM costumer
    WHERE customer_city=city_in
Error at Command Line : 8 Column : 25
Error report -
SQL Error: ORA-00904: "CITY_IN": undefined variable
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:


Error starting at line : 9 in command -
BEGIN
  IF city_in IS NOT NULL
  THEN
    OPEN cus_cur;
    FETCH cus_cur INTO number_cus;
    CLOSE cus_cur;
  END IF;
RETURN (number_cus);
END;

Error report -
ORA-06550: row 2, column 6:
PLS-00201: 'CITY_IN' variable should been defined
ORA-06550: row 2, column 3:
PL/SQL: Statement ignored
ORA-06550: row 8, column 1:
PLS-00372: in a procedure, RETURN can not contain an expression
ORA-06550: row 8, column 1:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

我的错误在哪里?没找到,没意义。(我用我的语言翻译了这条警告信息。我希望我做对了。)

我刚刚在命令行窗口中尝试过,它可以工作。为什么它在 Oracle SQL Developer sql 工作表中不起作用?

4

1 回答 1

2

您发布的代码没有任何问题。问题可能与您的客户或您编译代码的方式有关。

正如您在标签中提到的PL/SQL Developer,您可能在 SQL Worksheet 中有一些额外的字符并且您正在将函数编译脚本,因此编译器会发现它是错误的。

这是SQL*Plus中的演示,没有错误:

SQL> CREATE OR REPLACE FUNCTION customer_city_function(i_deptno IN number)
  2  RETURN NUMBER
  3  AS
  4  number_cus NUMBER := 0;
  5  CURSOR cus_cur IS
  6  SELECT COUNT(*)
  7  FROM emp
  8  WHERE deptno=i_deptno;
  9  BEGIN
 10    IF i_deptno IS NOT NULL
 11    THEN
 12    OPEN cus_cur;
 13    FETCH cus_cur INTO number_cus;
 14    CLOSE cus_cur;
 15  END IF;
 16  RETURN number_cus;
 17  END;
 18  /

Function created.

SQL> sho err
No errors.
SQL> SELECT customer_city_function(10) FROM DUAL;

CUSTOMER_CITY_FUNCTION(10)
--------------------------
                         3

SQL>

我的代码中唯一的区别是我使用EMP了 table 而不是CUSTOMERStable 并且输入参数是DEPTNO而不是CITY_IN. 休息一切都是一样的,函数编译和执行没有任何错误。

于 2015-05-07T06:23:09.830 回答