第一次来这里。我正在开发 SQL 触发器,需要找到一种方法来引用基于工单编号的值。数据如下:
这是我到目前为止所得到的,
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));
因此,我需要一个查询来查找集装箱编号,方法是从从
和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