带有引用值的 SQL 查询/触发器

问题描述 投票:0回答:1

第一次来这里。我正在开发 SQL 触发器,需要找到一种方法来引用基于工单编号的值。数据如下:

1

这是我到目前为止所得到的,

CURSOR C1 (insSpoolID IN CHAR) IS
select substr(data_valuestring,8) from E2S_SPOOLERDATA
where SPOOL_ID = insSpoolID AND DATA_VALUESTRING LIKE '!WO_NB!%%' ESCAPE '!';

CURSOR C2 (insSpoolID IN CHAR) IS
select substr(data_valuestring,14) from E2S_SPOOLERDATA
where SPOOL_ID = insSpoolID AND DATA_VALUESTRING LIKE '!PRODUCTCODE!%%' ESCAPE '!';

CURSOR C3 (insSpoolID IN CHAR) IS
select substr(data_valuestring,9) from E2S_SPOOLERDATA
where SPOOL_ID = insSpoolID AND DATA_VALUESTRING LIKE '!CONTNO!%%' ESCAPE '!';

CURSOR C4 (insSpoolID IN CHAR) IS
select substr(data_valuestring,8) from E2S_SPOOLERDATA
where SPOOL_ID = insSpoolID AND DATA_VALUESTRING LIKE '!BAGNO!%%' ESCAPE '!';

CURSOR C5 (insSpoolID IN CHAR) IS
select substr(data_valuestring,12) from E2S_SPOOLERDATA
where SPOOL_ID = insSpoolID AND DATA_VALUESTRING LIKE '!CONTAINER!%%' ESCAPE '!';

CURSOR C6 (insSpoolID IN CHAR) IS
select substr(data_valuestring,8) from E2S_SPOOLERDATA
where SPOOL_ID = insSpoolID AND DATA_VALUESTRING LIKE '!BATCH!%%' ESCAPE '!';

CURSOR C7 (insSpoolID IN CHAR) IS
select substr(data_valuestring,7) from E2S_SPOOLERDATA
where SPOOL_ID = insSpoolID AND DATA_VALUESTRING LIKE '!ITEM!%%' ESCAPE '!';

BEGIN
If :new.SPOOL_STATUS = 'S' then

   sSpoolID:= :new.spool_id;
   sDCMTCode:= :new.DCMT_CODE;


If sDCMTCode like '%VARPESEE%' then
     OPEN C1(sSpoolID);
     OPEN C2(sSpoolID);
     OPEN C3(sSpoolID);
     OPEN C4(sSpoolID);
     FETCH C1 INTO sWONb;
     FETCH C2 INTO sProductCode;
     FETCH C3 INTO sContNo;
     Fetch C7 INTO sItem;

**Get CONTAINERS_NB value, output to sCont_Total_Number:=TotalCont**

Insert into SPOOLERDATA (SPOOL_ID,SPOOL_INDEX,SPOOL_STATUS,DATA_TABLE,DATA_ROW,DATA_COLUMN,DATA_TYPE,DATA_LENGTH,DATA_VALUENUMBER,DATA_VALUEDATE,DATA_VALUESTRING) values (sSpoolID,'999','S','ROW','999','VALUE','VARCHAR2','250','0',null,'%CONT_PRINT_NUMBER_TOTAL%' || sCont_Total_Number);
     end if;

END IF;

# Need way to get the data CONTAINERS_NB(see table above, value is 2 in the example) where the work order numbers are matching for the two input variables, WO_NB and ITEM_NB.

因此,我需要一个查询来查找集装箱编号,方法是从 WO_NB 和 ITEM_NB 条目输入的相应 METADATASET 值中进行选择。

希望这是有道理的。

提前感谢任何提供帮助的人。

我已经开始计划使用这样的东西,但认为我可能离需要的东西还很远。

 SELECT TO_CHAR(VALUE) FROM E2S_METADATAVALUE_MAN WHERE NAME='WO_NB' 
      AND FK_METADATASET=
             (SELECT FK_METADATASET from E2S_METADATAVALUE_MAN 
                    where NAME='FORMULA_CATEGORY' 
                               AND FK_METADATASET IN 
             (SELECT FK_METADATASET FROM E2S_METADATAVALUE_MAN 
                    where dbms_lob.instr (Value,insC1WO) >0));  
sql oracle triggers metadata
1个回答
0
投票

因此,我需要一个查询来查找集装箱编号,方法是从从

METADATASET
WO_NB
条目输入的相应
ITEM_NB
值中进行选择。

您尝试使用光标执行的操作很难理解。

您似乎只需要一个

PIVOT
,然后过滤输出:

SELECT *
FROM   table_name
PIVOT (
  MAX(value)
  FOR (name) IN (
    'WO_NB' AS wo_nb,
    'ITEM_NB' AS item_nb,
    'CONTAINERS_NB' AS containers_nb
  )
)
WHERE  wo_nb   = v_the_wo_nb_you_are_trying_to_match
AND    item_nb = v_the_item_nb_you_are_trying_to_match
© www.soinside.com 2019 - 2024. All rights reserved.