如何在 PL/SQL 的 LIKE 子句中使用变量

布里洛克斯

我是 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
  • 在 PL/SQL 中,您必须将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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 where 子句中使用 SOUNDS LIKE

如何在SQL的where子句中使用like和substring

如何在单个 SQL 语句的 where 子句中使用两个 LIKE?

如何在MySQLi预准备语句中使用SQL LIKE子句

如何在 WHERE 子句中的变量中使用 AND

如何在Mysql If子句中使用用户变量?

如何在 IF 子句中对 LIKE 使用 MATCH?(MySql)

如何在plsql函数中使用绑定变量

如何在Rails中使用Like子句查询?

如何在 Impala 的 LIKE 语句中使用子查询?

在WHERE子句中使用NOT LIKE

如何在 IN 子句中使用通配符

如何在“with”子句中使用Refl

如果使用regexep_like循环,如何在plsql中使用下划线验证字母数字字符串?

如何在使用python的orientdb查询的where子句中使用变量

如何使用休眠的双精度类型的变量在mysql中使用like子句

如何使用sqlite3正确实现在变量LIKE语句中使用的索引?

如何在SQL中的SUM子句中使用not in子句

Oracle-在动态游标的LIKE子句中使用绑定变量

LINQ:如何在orderBy子句中使用变量字段列表

postgresql:如何在where子句中使用变量(行的某个列值)

如何在execute select语句where子句中使用变量而不会在列上出错?

在PDO的like子句中使用带撇号的字符串时,如何正确处理?

如何在shell脚本中使用oracle $$ PLSQL_LINE?

如何在PLSQL中的函数中使用顺序?

如何在 PLSQL 中使用类 JSON 对象 - APEX 19.2

如何在 sql 查询中使用 plsql 表类型?

如何在case語句中用逗號分隔的字符串上使用like子句

如何在LIKE子句中转义方括号?