В хранимой процедуре я отфильтровываю список сотрудников с ролью SUPER.ADMIN.
В таком случае я использовал подобное выражение, как показано ниже
Emp.Role_nm Like ''''||p_rolenm||''''
- p_rolenm я упомянул в хранимой процедуре как VARCHAR2
Когда я передаю значение p_rolenm как SUPER.ADMIN, это выдает ошибку, поскольку идентификатор SUPER.ADMIN не объявлен.
Как мне сбежать. (точка) в операторах PL/SQL?
1 ответ
Почему вы используете так много одинарных кавычек? Вам не нужно никаких (по крайней мере, я так думаю):
Пример данных:
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.
Похожие вопросы
Новые вопросы
oracle
Oracle Database - это многомодельная система управления базами данных, созданная корпорацией Oracle. НЕ используйте этот тег для других продуктов, принадлежащих Oracle, таких как Java и MySQL.