Oracle 如何从函数中插入单引号以在select语句中调用
我正在尝试为VPD编写一个函数,以阻止用户基于其运行的主机/计算机运行select查询。我想我已经完成了大部分的函数,但是我无法解决如何将变量转换成单引号的问题。我需要用引号括起来,这样我就可以对具有允许连接列表的表运行select语句(例如-select*from table,其中v_host='host';) 这是到目前为止我尝试过的一种变体,但我也尝试过其他几种,我觉得我有点头疼:Oracle 如何从函数中插入单引号以在select语句中调用,oracle,plsql,Oracle,Plsql,我正在尝试为VPD编写一个函数,以阻止用户基于其运行的主机/计算机运行select查询。我想我已经完成了大部分的函数,但是我无法解决如何将变量转换成单引号的问题。我需要用引号括起来,这样我就可以对具有允许连接列表的表运行select语句(例如-select*from table,其中v_host='host';) 这是到目前为止我尝试过的一种变体,但我也尝试过其他几种,我觉得我有点头疼: declare v_host VARCHAR2(100); v_host2 VARCHAR2
declare
v_host VARCHAR2(100);
v_host2 VARCHAR2(100);
begin
v_host := q'[SYS_CONTEXT('USERENV','HOST')]';
dbms_output.put_line(v_host);
end;
/
这就是你要找的吗
SQL> declare
2 v_host VARCHAR2(100);
3 v_host2 VARCHAR2(100);
4 begin
5 v_host := SYS_CONTEXT('USERENV','HOST');
6 dbms_output.put_line(v_host);
7
8 v_host2 := chr(39) || v_host || chr(39);
9 dbms_output.put_line(v_host2);
10 end;
11 /
LITTLEFOOT
'LITTLEFOOT'
PL/SQL procedure successfully completed.
SQL>
如果是,我做了什么?将
v_host
连接到单引号(chr(39)
)。不完全清楚您希望变量包含什么,但看起来您可能需要:
v_host := q'[select * from table where v_host = ']'
|| SYS_CONTEXT('USERENV','HOST') || q'[']';
但这里有一些变化:
declare
v_host VARCHAR2(100);
begin
v_host := q'[SYS_CONTEXT('USERENV','HOST')]';
dbms_output.put_line(v_host);
v_host := q'[select * from table where v_host = 'host']';
dbms_output.put_line(v_host);
v_host := q'[select * from table where v_host = SYS_CONTEXT('USERENV','HOST')]';
dbms_output.put_line(v_host);
v_host := q'[select * from table where v_host = ']'
|| SYS_CONTEXT('USERENV','HOST') || q'[']';
dbms_output.put_line(v_host);
end;
/
产生:
SYS\u上下文('USERENV','HOST')
从表中选择*,其中v_host='host'
从v_host=SYS_CONTEXT('USERENV','host')的表中选择*
从表中选择*,其中v_host='dbfiddle-oracle18xe.localdomain'
非常感谢,我这样做了:``声明v_主机VARCHAR2(100);v_host2 VARCHAR2(100);begin v_host:=q'[']'| | SYS_CONTEXT('USERENV','host')| | q'[']';dbms_output.put_line(v_主机);结束;/`这给了我:“ud005998”