在存储过程中,我过滤出角色为SUPER.ADMIN的员工列表
在这种情况下,我使用如下表达式
Emp.Role_nm Like ''''||p_rolenm||''''
[每当我将值作为SUPER.ADMIN传递给p_rolenm时,都会抛出错误,因为未声明标识符SUPER.ADMIN。
我如何能够逃脱。 (点)在PL / SQL语句中?
您为什么使用那么多单引号?您不需要任何东西(至少,我认为是这样):
样本数据:
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会话。