首页 > 解决方案 > 为什么这个查询没有返回结果

问题描述

我在 MySQL 中有简单的查询,例如

SELECT * FROM generals WHERE `Key` =  '{$key}'

我想使用 PL/SQL 在 Oracle 中创建函数,当我将它转换为时PL/SQL,它看起来像

FUNCTION GET_GENERALS_BY_KEY(p_key IN VARCHAR2)
    RETURN SYS_REFCURSOR IS 
    rc  SYS_REFCURSOR;
BEGIN
    OPEN rc FOR 
  SELECT * FROM generals WHERE Key LIKE '%p_key%';
RETURN rc;
END GET_GENERALS_BY_KEY;

当我测试它时,我调用函数

SELECT GENERALS_PACKAGE.GET_GENERALS_BY_KEY('Company_Name') FROM DUAL;

但不返回任何东西。但是当我使用这样的查询时,它会返回结果。

SELECT * FROM generals WHERE Key = 'VAT';

怎么了 ?我在哪里犯错了?

标签: oracleplsql

解决方案


应该

OPEN rc FOR
SELECT * FROM generals WHERE Key LIKE '%' || p_key || '%';

                                          ^^       ^^
                                          concatenation

推荐阅读