Oracle T-SQL到PL-SQL-在同一搜索中使用null和like,但只有null语句起作用

Oracle T-SQL到PL-SQL-在同一搜索中使用null和like,但只有null语句起作用,oracle,tsql,plsql,Oracle,Tsql,Plsql,我需要将sql server上的一些搜索更改为oracle数据库 在下面的查询中,如果搜索为null,则返回所有记录;如果用户搜索特定名称,则仅返回名称 SQL SERVER: SELECT * FROM Person " + "WHERE (@Nome IS NULL OR Nome LIKE @Nome + '%') " + "ORDER BY [Nome] " +

我需要将sql server上的一些搜索更改为oracle数据库

在下面的查询中,如果搜索为null,则返回所有记录;如果用户搜索特定名称,则仅返回名称

SQL SERVER:

   SELECT * FROM Person " +
                      "WHERE (@Nome IS NULL OR Nome LIKE @Nome + '%') " +
                      "ORDER BY [Nome] " +
                      "OFFSET " + pageSize * (pageNumber - 1) + " ROWS " +
                      "FETCH NEXT " + pageSize + " ROWS ONLY " +
                      " " +
                      "SELECT COUNT(Id) FROM Person " +
                      "WHERE (@Nome IS NULL OR Nome LIKE @Nome + '%') AND Ativo = 1";
通过将查询更改为pl/sql,如果没有进行搜索,我可以调出所有记录,但在搜索特定名称时,返回的是空的

甲骨文:

SELECT * 
           FROM (
               SELECT ROWNUM rnum, b.* 
                   FROM (
                      SELECT * 
                          FROM Person 
                              WHERE (:Nome IS NULL OR NOME LIKE ':Nome%')
                            )b 
                    ) WHERE RNUM between :PageSize * (:PageNumber - 1) AND  (:PageSize * :PageNumber)";
如何返回一个特定的或空的名称,如果可能的话。。。如何将该搜索的计数与查询一起返回?

您应该使用CONCAT:

Nome LIKE :Nome || '%'
-- or
Nome LIKE CONCAT(:Nome, '%')

NOME LIKE':NOME%'的变量名用引号括起来。这就像在SQL Server中使用“@Nome%”。@WilliamRobertson是的,但我正在改用Oracle,这就是我使用:name的原因。嗯,在RDBMS或大多数编程语言中,引用变量名似乎都不起作用。