PLS-00103 在 Oracle 游标中提供参数时

PLS-00103 When providing parameter in Oracle cursor

已经搜索了一段时间,但我无法在函数内的游标中传递参数时发现以下错误的原因:

LINE/COL ERROR
-------- -----------------------------------------------------------------
10/7     PLS-00103: Encountered the symbol "WHERE" when expecting one of
     the following:
     begin function pragma procedure subtype type <an identifier>
     <a double-quoted delimited-identifier> current cursor delete
     exists prior

我一直在检查代码的结构,但没有成功。这是完整的 sql 代码:

CREATE TABLE subs (
   subs_list VARCHAR(500)
)
INSERT INTO subs (subs_list)
VALUES(('MOUNTAIN, MOUNT, MT, MTN'));

INSERT INTO subs (subs_list)
VALUES(('VIEW, VU'));

CREATE TABLE subs (
subs_list VARCHAR(500)
)
INSERT INTO subs (subs_list)
VALUES(('MOUNTAIN, MOUNT, MT, MTN'));

INSERT INTO subs (subs_list)
VALUES(('VIEW, VU'));


    SQL> CREATE OR REPLACE FUNCTION replace_synonyms(text IN VARCHAR2)
  2      RETURN VARCHAR2
  3  IS
  4      p_text VARCHAR2(4000) := text;
  5
  6      CURSOR c_subs
  7      IS
  8        SELECT subs_list
  9        FROM subs
 10        WHERE subs_list LIKE '%' ||p_text|| '%';
 11  BEGIN
 12     FOR i IN c_subs
 13      LOOP
 14        dbms_output.put_line(i.subs_list);
 15      END LOOP;
 16
 17     RETURN p_text;
 18  END;
 19  /

虽然您的 INSERT 语句有一个 ;最后,CREATE TABLE 语句不会。 检查前面的所有语句是否已成功完成。

CREATE TABLE subs (subs_list VARCHAR(500));

Table created.

INSERT INTO subs (subs_list)  VALUES(('MOUNTAIN, MOUNT, MT, MTN'));

1 row created.

INSERT INTO subs (subs_list) VALUES(('VIEW, VU'));

1 row created.

CREATE OR REPLACE FUNCTION replace_synonyms(text IN VARCHAR2)
RETURN VARCHAR2
IS
    p_text VARCHAR2(4000) := text;

    CURSOR c_subs
    IS
      SELECT subs_list
      FROM subs
      WHERE subs_list LIKE '%' ||p_text|| '%';
BEGIN
   FOR i IN c_subs
    LOOP
      dbms_output.put_line(i.subs_list);
    END LOOP;

   RETURN p_text;
END;
/

Function created.