1.常用的查找表的方法
在bmide中,對於BusinessObject的子類,都存在一個存儲類與之對應,例如常用的ItemRevision類,存在ItemRevision存儲類,如下圖:
與之相對應的數據庫表名即爲P+ItemRevision,也就是說,存儲類名開頭加上"P",就是數據庫表名。
在bmide中點擊進入存儲類,就能找到屬性對應存儲在哪個存儲類裏,也就能找到相應的數據表。
例如上圖的H9AsmFinPrdRevision類,h9InputVA存儲與PH9AsmFinPrdRevision表中,而其他的屬性繼承於ItemRevision,存儲於PItemRevision中。
2.用到過的表
表名 | 表的作用 | 備註 |
---|---|---|
PPOM_USER | 存儲用戶信息 | |
PPOM_GROUP | 存儲分組信息 | |
PSMLB0 | 分類信息 | |
PLISTOFVALUES | LOV存儲表 | 這個表下面還有細分,比如PLISTOFVALUESSTRING等。 |
PFND0LOVDICTIONARYENTRY | LOV數據字典 | 存儲了所有lov的真實值 |
PL10N_FND0ENTRY | LOV顯示值 | 存儲了所有lov的真實值對應的顯示值 |
PNOTETYPE 、PNOTE_TYPES_0 、PNOTE_TEXTS_0 | BOM註釋屬性 | 存儲BOM行註釋屬性 |
持續更新 |
3.使用過的語句
1.分類相關
1.分類樹獲取
"SELECT t_01.puid, t_01.pcid, t_01.pcflags, t_01.pname "
+ "FROM PSMLB0 t_01 "
+ "WHERE (t_01.pklassi = ?) "
+ "UNION SELECT t_03.puid, t_03.pcid, t_03.pcflags, t_03.pname "
+ "FROM PPARENT t_02 , PSMLB0 t_03 "
+ "WHERE (((t_02.pseq = 0) AND (t_02.pval_0 = ?)) AND (t_02.puid = t_03.puid)) ORDER BY 2 ASC";
來源:輝哥tech
2.創建視圖
1.查找最新版本,去除基線小版本
CREATE OR REPLACE VIEW LATESTREV AS
SELECT
REV.PUID,
ITEM.PITEM_ID,
REV.PITEM_REVISION_ID
FROM
PITEMREVISION REV,
PITEM ITEM,
PWORKSPACEOBJECT OBJ
WHERE
ITEM.PUID = REV.RITEMS_TAGU
AND OBJ.PUID = REV.PUID
AND OBJ.PACTIVE_SEQ != '0'
AND REV.PITEM_REVISION_ID = (
SELECT
MAX(TREV.PITEM_REVISION_ID)
FROM
PITEMREVISION TREV,
PITEM TITEM
WHERE
TREV.PITEM_REVISION_ID NOT LIKE '%.%'
AND TITEM.PUID = TREV.RITEMS_TAGU
AND ITEM.PUID = TITEM.PUID
);
2.查找最新有狀態的版本 排除基線小版本 不指定狀態
CREATE
OR REPLACE VIEW LATESTRELEASEDREV AS
SELECT
REV.PUID,
ITEM.PITEM_ID,
REV.PITEM_REVISION_ID,
RELEASE.PNAME
FROM
PITEMREVISION REV,
PITEM ITEM,
PRELEASE_STATUS_LIST RELEASE_LIST,
PWORKSPACEOBJECT OBJ,
PRELEASESTATUS RELEASE
WHERE
ITEM.PUID = REV.RITEMS_TAGU
AND OBJ.PUID = REV.PUID
AND OBJ.AOID = RELEASE_LIST.PUID
AND RELEASE_LIST.PVALU_0 = RELEASE.PUID
AND OBJ.PACTIVE_SEQ != '0'
AND REV.PITEM_REVISION_ID = (
SELECT
MAX(TREV.PITEM_REVISION_ID)
FROM
PITEMREVISION TREV,
PITEM TITEM,
PRELEASE_STATUS_LIST TRELEASE_LIST,
PWORKSPACEOBJECT TOBJ,
PRELEASESTATUS TRELEASE
WHERE
TREV.PITEM_REVISION_ID NOT LIKE '%.%'
AND TOBJ.PUID = TREV.PUID
AND TOBJ.AOID = TRELEASE_LIST.PUID
AND TRELEASE_LIST.PVALU_0 = TRELEASE.PUID
AND TITEM.PUID = TREV.RITEMS_TAGU
AND ITEM.PUID = TITEM.PUID
)
3.查找最新有狀態的版本 排除基線小版本 指定狀態"TCM Released"
CREATE
OR REPLACE VIEW LATESTRELEASEDREV_TCM_Released AS
SELECT
REV.PUID,
ITEM.PITEM_ID,
REV.PITEM_REVISION_ID,
RELEASE.PNAME
FROM
PITEMREVISION REV,
PITEM ITEM,
PRELEASE_STATUS_LIST RELEASE_LIST,
PWORKSPACEOBJECT OBJ,
PRELEASESTATUS RELEASE
WHERE
ITEM.PUID = REV.RITEMS_TAGU
AND OBJ.PUID = REV.PUID
AND OBJ.AOID = RELEASE_LIST.PUID
AND RELEASE_LIST.PVALU_0 = RELEASE.PUID
AND OBJ.PACTIVE_SEQ != '0'
AND REV.PITEM_REVISION_ID = (
SELECT
MAX(TREV.PITEM_REVISION_ID)
FROM
PITEMREVISION TREV,
PITEM TITEM,
PRELEASE_STATUS_LIST TRELEASE_LIST,
PWORKSPACEOBJECT TOBJ,
PRELEASESTATUS TRELEASE
WHERE
TREV.PITEM_REVISION_ID NOT LIKE '%.%'
AND TOBJ.PUID = TREV.PUID
AND TOBJ.AOID = TRELEASE_LIST.PUID
AND TRELEASE_LIST.PVALU_0 = TRELEASE.PUID
AND TITEM.PUID = TREV.RITEMS_TAGU
AND TRELEASE.PNAME = 'TCM Released'
AND ITEM.PUID = TITEM.PUID
)
4.創建子-父關係的視圖
CREATE OR REPLACE VIEW CHILD_PARENT AS
SELECT
CREV.PUID AS PCHILD_PUID,
PREV.PUID AS PPARENT_PUID,
OBJ.POBJECT_TYPE AS PPARENT_TYPE
FROM
PITEMREVISION CREV,
PITEMREVISION PREV,
PITEM CITEM,
PPSOCCURRENCE OCC,
PSTRUCTURE_REVISIONS STR,
PWORKSPACEOBJECT OBJ
WHERE
(
CITEM.PUID = OCC.RCHILD_ITEMU
OR CREV.PUID = OCC.RCHILD_ITEMU
)
AND OCC.RPARENT_BVRU = STR.PVALU_0
AND STR.PUID = PREV.PUID
AND OBJ.PUID = PREV.PUID
AND CITEM.PUID = CREV.RITEMS_TAGU
AND OBJ.PACTIVE_SEQ != '0'
3.創建package
1.根據LOV名稱及真實值獲取顯示值
create or replace package CMService is
function getLovValueDes(typeName in varchar2,LovValue in varchar2) return varchar2;
end CMService;
create or replace package body CMService is
--根據LOV類型及真實值獲取顯示值
function getLovValueDes(typeName in varchar2,LovValue in varchar2) return varchar2 is
result varchar2(50);
begin
SELECT substr(t3.pval_0,49) into result
FROM PLISTOFVALUES t1, PFND0LOVDICTIONARYENTRY t2, PL10N_FND0ENTRY t3
where t1.puid = t2.rfnd0lovu
and t2.puid = t3.puid
and t1.plov_name = typeName
and t3.pseq = 1
and t2.pfnd0entry= LovValue;
return result;
end;
end CMService;
來源:儲老師
4.BOM相關
1.查詢指定物料下層
SELECT *
FROM (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY pitem_id ORDER BY pitem_revision_id DESC) AS num
FROM (
SELECT c.pitem_id, d.pitem_revision_id, a.pqty_value, l.pobject_name
FROM PPSOCCURRENCE a, pworkspaceobject l, (
SELECT c.pitem_id, e.pitem_revision_id, e.psequence_id, e.puid AS rev_id, b.puid AS bv_id
, a.puid AS bvr_id
FROM ppsbomviewrevision a
JOIN ppsbomview b ON a.rbom_viewu = b.puid
JOIN pitem c ON b.rparent_itemu = c.puid
JOIN pstructure_revisions d ON a.puid = d.pvalu_0
JOIN pitemrevision e ON d.puid = e.puid
) b, pitem c, pitemrevision d
WHERE a.rparent_bvru = b.bvr_id
AND a.rchild_itemu = c.puid
AND a.rchild_itemu = d.ritems_tagu
AND b.pitem_id = 'item_id'
AND b.pitem_revision_id = '版本號'
AND l.puid = c.puid
) t
)
SELECT c.pitem_id, d.pitem_revision_id, d.puid, a.pqty_value, l.pobject_name
, rev_id, l.pobject_type, a.RNOTES_REFU, a.PSEQ_NO, a.pext_transform_rot00
, a.pext_transform_rot10, a.pext_transform_rot20, a.pext_transform_per0, a.pext_transform_rot01, a.pext_transform_rot11
, a.pext_transform_rot21, a.pext_transform_per1, a.pext_transform_rot02, a.pext_transform_rot12, a.pext_transform_rot22
, a.pext_transform_per2, a.pext_transform_tra0, a.pext_transform_tra1, a.pext_transform_tra2, a.pext_transform_invscale
FROM PPSOCCURRENCE a, pworkspaceobject l, (
SELECT IT.PITEM_ID, REV.PITEM_REVISION_ID, REV.PSEQUENCE_ID, REV.PUID AS REV_ID, RL.PVALU_0 AS BVR_ID
FROM PITEM IT, PITEMREVISION REV, PSTRUCTURE_REVISIONS RL
WHERE IT.PUID = REV.RITEMS_TAGU
AND REV.PUID = RL.PUID
) b, pitem c, pitemrevision d
WHERE a.rparent_bvru = b.bvr_id
AND a.rchild_itemu = c.puid
AND a.rchild_itemu = d.ritems_tagu
AND b.pitem_id = '父id'
AND b.pitem_revision_id = '版本號'
AND l.puid = c.puid
AND l.pactive_seq != 0
AND d.PITEM_REVISION_ID = (
SELECT MAX(PITEM_REVISION_ID)
FROM PITEMREVISION
WHERE RITEMS_TAGU = c.PUID
);
2.通過子件id,查找父項最新版本(LASTESTREV是上面的最新版本視圖)
SELECT prev.puid, prev.pitem_revision_id, pitem.pitem_id
FROM pitem citem, PPSOCCURRENCE pps, PSTRUCTURE_REVISIONS pst, pitemrevision prev, pitem pitem, LASTESTREV
WHERE citem.pitem_id = 'LSV2223FFGG00001_G001L01'
AND citem.puid = pps.rchild_itemu
AND pps.rparent_bvru = pst.pvalu_0
AND pst.puid = prev.puid
AND pitem.puid = prev.ritems_tagu
AND lastestrev.pitem_id = pitem.pitem_id;
3.由子找到所有上層(CHILD_PARENT是上面提到的視圖)
SELECT
DISTINCT PCHILD_PUID,
PPARENT_PUID,
PPARENT_TYPE
FROM
CHILD_PARENT START WITH PCHILD_PUID IN ('子件版本uid') CONNECT BY PCHILD_PUID = PRIOR PPARENT_PUID
4.寫在後面
此tech積累TC數據庫相關知識,持續更新。