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.
已经搜索了一段时间,但我无法在函数内的游标中传递参数时发现以下错误的原因:
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.