Как избавиться от точки (.) В похожем выражении в Oracle PL / SQL Statement - PullRequest
0 голосов
/ 20 ноября 2019

В хранимой процедуре я отфильтровываю список сотрудников с ролью SUPER.ADMIN

. В таком случае я использовал такое выражение, как показано ниже

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

  • p_rolenm Я упоминал в хранимой процедуре как VARCHAR2

Когда я передаю значение в p_rolenm как SUPER.ADMIN, возникает ошибка, так как идентификатор SUPER.ADMIN не объявляется.

Как я могу сбежать. (Точка) в инструкциях PL / SQL?

1 Ответ

3 голосов
/ 21 ноября 2019

Почему вы используете столько одинарных кавычек? Вам не нужно (по крайней мере, я так думаю):

Пример данных:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...