Oracle 用于在表列中搜索关键字的sql存储过程
我有一张名为推荐表的桌子。我需要存储一个数据库过程,在“contents”列中搜索关键字并显示匹配的行。我正在使用sql plusOracle 用于在表列中搜索关键字的sql存储过程,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我有一张名为推荐表的桌子。我需要存储一个数据库过程,在“contents”列中搜索关键字并显示匹配的行。我正在使用sql plus CREATE OR REPLACE PROCEDURE Search_Testimonials (@WRDSRCH VARCHAR2) AS BEGIN SELECT * FROM Testimonials where content like concat('%',WRDSRCH,'%'); END; / 我不断得到警告:
CREATE OR REPLACE PROCEDURE Search_Testimonials
(@WRDSRCH VARCHAR2)
AS
BEGIN
SELECT * FROM Testimonials
where content like concat('%',WRDSRCH,'%');
END;
/
我不断得到警告:编译错误创建的过程 您的代码中有几个错误(如果不进行修改,就无法使用TSQL代码):
- 参数名在Oracle中不使用@(如@a_horse_和\u no_name所述)
- 你需要一些东西来存储结果(同样,正如@a_horse_和_no_name提到的)
- 不能使用3个参数调用CONCAT;要连接字符串,可以使用
运算符| |
正如带有“无”名称的@a_horse_所述,在使用变量时不使用“@”。 此外,concat函数不适用于您的情况。 您的程序的正确版本是
create or replace
PROCEDURE Search_Testimonials (WRDSRCH in VARCHAR2,o_cursor out sys_refcursor)
is
BEGIN
OPEN o_cursor FOR
SELECT * FROM Testimonials
where content LIKE '%' || WRDSRCH || '%';
END;
如果您是从sqlplus或SQLDeveloper运行,请使用以下命令执行
var rc refcursor
exec Search_Testimonials ('A',:rc);
print rc;
根据我个人的观点,一个没有名字的“马”所建议的更改是我们从SQL Server迁移到Oracle时必须在代码中进行的两个最大的更改 我建议您创建一个函数,而不是一个过程,如下所示:
CREATE OR REPLACE FUNCTION Search_Testimonials
(WRDSRCH VARCHAR2)
RETURN sys_refcursor
IS
ret_cur sys_refcursor;
BEGIN
OPEN ret_cur FOR
SELECT *
FROM Testimonials
WHERE content like '%'||WRDSRCH||'%';
RETURN ret_cur;
END;
/
使用此函数的优点是,您可以简单地运行如下查询,并在Toad或SQL Developer中获得结果:
SELECT Search_Testimonials ('some_text')
FROM dual;
结果将只包含一个单元格,表示
(光标)
,但双击该单元格将显示整个结果集。参数在Oracle中不使用@
。您需要一些东西来存储查询结果。
CREATE OR REPLACE FUNCTION Search_Testimonials
(WRDSRCH VARCHAR2)
RETURN sys_refcursor
IS
ret_cur sys_refcursor;
BEGIN
OPEN ret_cur FOR
SELECT *
FROM Testimonials
WHERE content like '%'||WRDSRCH||'%';
RETURN ret_cur;
END;
/
SELECT Search_Testimonials ('some_text')
FROM dual;