Oracle 这个工会会员有什么问题
我有点困惑,不明白为什么会出现这个错误。 到目前为止,我想在SQLDeveloperOracle 这个工会会员有什么问题,oracle,plsql,Oracle,Plsql,我有点困惑,不明白为什么会出现这个错误。 到目前为止,我想在SQLDeveloperPLSQL 因为我有一个多参数要发送,所以我使用了UNION,但到目前为止,这不起作用 FUNCTION SEARCH_CLIENT(name IN VARCHAR2) RETURN SYS_REFCURSOR IS rc SYS_REFCURSOR; BEGIN OPEN rc FOR SELECT * FROM clients WHERE Name LIKE '%name%';
PLSQL
因为我有一个多参数要发送,所以我使用了UNION
,但到目前为止,这不起作用
FUNCTION SEARCH_CLIENT(name IN VARCHAR2)
RETURN SYS_REFCURSOR IS
rc SYS_REFCURSOR;
BEGIN
OPEN rc FOR
SELECT * FROM clients WHERE Name LIKE '%name%';
UNION
SELECT * FROM clients WHERE Number LIKE '%name%'
UNION
SELECT * FROM clients WHERE Company LIKE '%name%'
UNION
SELECT * FROM clients WHERE Address LIKE '%name%'
UNION
SELECT * FROM clients WHERE CompanyId LIKE '%name%'
UNION
SELECT * FROM clients WHERE InvoiceAddress LIKE '%name%'
UNION
SELECT * FROM clients WHERE Worker_name LIKE '%name%'
UNION
SELECT * FROM clients WHERE PostNumber LIKE '%name%';
RETURN rc;
END SEARCH_CLIENT;
我会犯这样的错误
Error(19,33): PL/SQL: ORA-00936: missing expression
Error(17,6): PL/SQL: SQL Statement ignored
两个明显的错误:
SELECT * FROM clients WHERE Name LIKE '%name%'; --> remove semi-colon
UNION
SELECT * FROM clients WHERE Number LIKE '%name%' --> number is invalid column name
稍微不那么明显一点:
像
一样是行不通的。你必须使用
WHERE Name LIKE '%' || name ||'%'
否则,您将搜索包含“name”的字符串。此外,若列名等于参数名,则会得到错误的结果;将参数名称更改为,例如par_name
,然后
WHERE Name LIKE '%' || par_name ||'%'
UNION从两个子查询生成一个结果集。这是一个单一的声明。因此,您需要从UNION关键字前面的第一个子查询中删除分号。第一个UNION之后有一个分号 另外,这是一个糟糕的SQL语句,速度慢且效率低
在生产环境的应用程序代码中使用*是一种不好的做法命名列而不是使用*总是好的 如果不使用like,那么可以将所有where语句组合成一个where子句
SELECT * FROM clients WHERE 'name' in (name, number)....;
- 使用union时,不需要使用分号(;) 在每个select语句之后
- 在我们必须使用的oracle函数和过程中使用Like 与“%”名称“%”类似的浓缩
SELECT
station:D中写20列要花我的时间但是我接受你的回答,你是100%对的。如果你使用SQL developer,你可以简单地拖动表名,它会给你选择所有名为的列的选项。)谢谢你的建议:=)