Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql Oracle-设置变量以反映函数输入值的前3个字符_Plsql_Oracle11g - Fatal编程技术网

Plsql Oracle-设置变量以反映函数输入值的前3个字符

Plsql Oracle-设置变量以反映函数输入值的前3个字符,plsql,oracle11g,Plsql,Oracle11g,我有一个过程,它传入一个字符串值,然后再传入一个函数。我需要为传入的字符串创建一个变量,以仅反映在like where子句中使用的前3个字符 我不知道该怎么做,下面的函数会在select语句中以“abc 123 def”的形式传入,我只想有效地获取传入的前3个字符,因此where子句的计算结果为 和AW|u ACTIVE|u ALARMS.module,如abc | |'%” CREATE OR REPLACE FUNCTION OPC_OP.sitezone_msm (in_site_

我有一个过程,它传入一个字符串值,然后再传入一个函数。我需要为传入的字符串创建一个变量,以仅反映在like where子句中使用的前3个字符

我不知道该怎么做,下面的函数会在select语句中以“abc 123 def”的形式传入,我只想有效地获取传入的前3个字符,因此where子句的计算结果为 和AW|u ACTIVE|u ALARMS.module,如abc | |'%”

CREATE OR REPLACE FUNCTION OPC_OP.sitezone_msm
    (in_site_id AW_ACTIVE_ALARMS.site_id%TYPE
    ,in_zone_id AW_ACTIVE_ALARMS.zone_id%TYPE
    ,in_mod AW_ACTIVE_ALARMS.module%TYPE)

RETURN NUMBER
IS

v_msm NUMBER;

BEGIN
    SELECT COALESCE(MAX(AW_ACTIVE_ALARMS.weight),0)
    INTO v_msm
    FROM AW_ACTIVE_ALARMS 
    WHERE AW_ACTIVE_ALARMS.site_id = in_site_id
    AND AW_ACTIVE_ALARMS.zone_id = in_zone_id
    AND AW_ACTIVE_ALARMS.module LIKE in_mod||'%'; 
RETURN (v_msm);

END sitezone_msm;

下面是一种使用
regexp\u substr
获取字符串开头第一个空格前的字符的方法。如果规则真的是空格前的字符,而不仅仅是前三个字符(如果可能是可变数量的字符)。取决于你的数据

AND AW_ACTIVE_ALARMS.module LIKE regexp_substr(in_mod, '^([^ ]*) ', 1, 1, null, 1)  ||'%'; 
或者如果您喜欢
regexp\u replace

AND AW_ACTIVE_ALARMS.module LIKE regexp_replace(in_mod, '^([^ ]*) (.*)', '\1')  ||'%'; 

您好,如果您知道必须只选择前三个字符,我们可以使用substr函数。我现在没有工作空间,但我认为这应该行得通

CREATE OR REPLACE FUNCTION OPC_OP.sitezone_msm
    (in_site_id AW_ACTIVE_ALARMS.site_id%TYPE
    ,in_zone_id AW_ACTIVE_ALARMS.zone_id%TYPE
    ,in_mod AW_ACTIVE_ALARMS.module%TYPE)

RETURN NUMBER
IS

v_msm NUMBER;

BEGIN
    SELECT COALESCE(MAX(AW_ACTIVE_ALARMS.weight),0)
    INTO v_msm
    FROM AW_ACTIVE_ALARMS 
    WHERE AW_ACTIVE_ALARMS.site_id = in_site_id
    AND AW_ACTIVE_ALARMS.zone_id = in_zone_id
    AND AW_ACTIVE_ALARMS.module LIKE SUBSTR(in_mod,1,3)||'%'; 
RETURN (v_msm);

END sitezone_msm;

您是否尝试过“选择SUBSTR('ABCDEFG',3,4)”?可以替换3(起点)和4(多少个字符)。您可以将其包装在任何字符串中,包括一个函数result.durbnpoison-添加代码,因为不清楚如何获得我所需的所有反馈感谢自从我执行任何PL/SQL以来的几年-我尝试了上述建议,函数现在返回预期值。谢谢你的帮助