TC數據庫相關整理(持續更新)

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數據庫相關知識,持續更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章