如何在Oracle PL / SQL语句中的相似表达式中转义点(。)

问题描述 投票:0回答:1

在存储过程中,我过滤出角色为SUPER.ADMIN的员工列表

在这种情况下,我使用如下表达式

Emp.Role_nm Like ''''||p_rolenm||''''

  • 我在存储过程中以VARCHAR2提到的p_rolenm

[每当我将值作为SUPER.ADMIN传递给p_rolenm时,都会抛出错误,因为未声明标识符SUPER.ADMIN。

我如何能够逃脱。 (点)在PL / SQL语句中?

oracle plsql plsqldeveloper
1个回答
0
投票

您为什么使用那么多单引号?您不需要任何东西(至少,我认为是这样):

样本数据:

SQL> create table test (id number, role varchar2(20));

Table created.

SQL> insert into test
  2  select 1, 'CLERK' from dual union all
  3  select 2, 'SUPER.ADMIN' from dual;

2 rows created.

SQL> select * from test;

        ID ROLE
---------- --------------------
         1 CLERK
         2 SUPER.ADMIN

SQL> set serveroutput on;

程序(虽然是匿名的,但这没关系):

SQL> declare
  2    p_rolenm varchar2(20) := 'SUPER.ADMIN';
  3    l_id     number;
  4  begin
  5    select id into l_id
  6    from test
  7    where role = p_rolenm;
  8
  9    dbms_output.put_line('l_id = ' || l_id);
 10  end;
 11  /
l_id = 2

PL/SQL procedure successfully completed.

SQL>

如果需要like,则

SQL> declare
  2    p_rolenm varchar2(20) := 'PER.ADM';            --> I changed this ...
  3    l_id     number;
  4  begin
  5    select id into l_id
  6    from test
  7    where role like '%' || p_rolenm || '%';        --> ... and this
  8
  9    dbms_output.put_line('l_id = ' || l_id);
 10  end;
 11  /
l_id = 2

PL/SQL procedure successfully completed.

SQL>

如果使用动态SQL,则

SQL> declare
  2    p_rolenm varchar2(20) := 'PER.ADM';
  3    l_id     number;
  4    l_str    varchar2(200);                      --> new variable for execute immediate
  5  begin
  6    l_str := q'[select id from test where role like '%' || :a || '%']';
  7    execute immediate l_str into l_id using p_rolenm;
  8
  9    dbms_output.put_line('l_id = ' || l_id);
 10  end;
 11  /
l_id = 2

PL/SQL procedure successfully completed.

SQL>

不久,我不明白你在做什么。尝试遵循我的示例。如果仍然无法使用,请发布您的SQL * Plus会话。

© www.soinside.com 2019 - 2024. All rights reserved.