首页 > 解决方案 > 如何从函数插入单引号以在选择语句中调用

问题描述

我正在尝试为 VPD 编写一个函数,以阻止用户根据他们正在运行的主机/机器运行选择查询。我认为我的大部分功能都已关闭,但我一生都无法弄清楚如何将我的变量放入单引号中。我需要它在引号中,以便我可以针对具有允许连接列表的表运行 select 语句(例如 - select * from table where v_host = 'host';)。

这是迄今为止我尝试过的变体之一,但我已经进行了其他几次尝试,我觉得我有点头疼:

declare
    v_host VARCHAR2(100);
    v_host2 VARCHAR2(100);
begin
    v_host := q'[SYS_CONTEXT('USERENV','HOST')]';
    dbms_output.put_line(v_host);
end;
/

标签: oracleplsql

解决方案


这是你要找的吗?

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))。


推荐阅读