我是 Oracle 和学习的新手;我只是想运行这个 T-SQL 查询
DECLARE @SearchObj varchar(100);
SET @SearchObj='%aldbrough%';
SELECT
obj_id,
name,
description
FROM
agnis.t_object
WHERE
lower(name) = ObjToSearch ;
我正在使用 SQL Developer Oracle 工具,它还有一个“临时编辑器”来帮助从 T-SQL 进行翻译。当我运行该工具时,它给了我这个代码
DECLARE
v_SearchObj VARCHAR2(100);
BEGIN
v_SearchObj := '%aldbrough%' ;
SELECT obj_id ,
NAME ,
DESCRIPTION
FROM agnis.t_object
WHERE LOWER(NAME) = ObjToSearch;
END;
但同样的工具给了我这个错误
Error report -
ORA-06550: line 10, column 26:
PL/SQL: ORA-00904: "OBJTOSEARCH": invalid identifier
ORA-06550: line 6, column 4:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
那么在返回多行的 LIKE 子句中使用变量的正确语法是什么?我希望我不必对这个问题中建议的简单语句使用游标等
嗯,是的 - 那些“翻译”并不总是做他们应该做的。
你的代码应该是这样的:
like
,没有=
了在where
第select
语句的结果放入into
某些内容 - 例如,本地声明的变量(如我的示例所示)。所以:
DECLARE
v_SearchObj VARCHAR2 (100) := '%aldbrough%';
--
v_obj_id t_object.obj_id%TYPE;
v_name t_object.name%TYPE;
v_description t_object.description%TYPE;
BEGIN
SELECT obj_id, NAME, DESCRIPTION
INTO v_obj_id, v_name, v_description
FROM agnis.t_object
WHERE LOWER (NAME) LIKE v_searchobj;
END;
如果这样的代码返回一个错误- too_many_rows
(是的,它),那么一种选择是循环通过行和做一些事情(如显示这些值):
DECLARE
v_SearchObj VARCHAR2 (100) := '%aldbrough%';
BEGIN
FOR cur_r IN (SELECT obj_id, NAME, DESCRIPTION
FROM agnis.t_object
WHERE LOWER (NAME) LIKE v_searchobj)
LOOP
DBMS_OUTPUT.put_line (
'Name = ' || cur_r.name || ', description = ' || cur_r.description);
END LOOP;
END;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句