CREATE OR REPLACE TYPE ID_TYPE AS OBJECT(ID_T varchar2(36));
CREATE OR REPLACE TYPE ID_TABLE AS TABLE OF ID_TYPE;
create or replace procedure P_CM_DIRECTORY_DELETE(I_NODE_ID IN VARCHAR2, --文件节点ID
O_RESULT OUT VARCHAR2, --错误结果 0 失败 1 成功
O_MESSAGE OUT VARCHAR2 --错误信息
) is
/**
* 版权所有: 版权所有(C) 2017,联友科技
* 完成日期:2017年6月27日
* 作 者:张嘉俊
* 版 本:V1.0
**/
fileId ID_TABLE := ID_TABLE(); --局部变量存放要删除的文件节点ID
refPartId ID_TABLE := ID_TABLE(); --局部变量存放要删除的成本估算零件ID
node_type varchar(36);
begin
SELECT NODE_TYPE --判断要删除的文件类型,如果不是300则结束储存过程
INTO node_type
FROM T_CM_BU_DIR_STRUCT
WHERE NODE_ID = I_NODE_ID;
IF node_type <> '300' THEN
O_RESULT := '0';
O_MESSAGE := '文件类型不是个人文件';
RETURN;
END IF;
SELECT ID_TYPE(NODE_ID) BULK COLLECT --存放要删除的文件节点ID
INTO fileId
FROM T_CM_BU_DIR_STRUCT
START WITH NODE_ID = I_NODE_ID
CONNECT BY PRIOR NODE_id = P_NODE_ID;
SELECT ID_TYPE(P.REF_PART_ID) BULK COLLECT --存放要删除的成本估算零件ID
INTO refPartId
FROM T_CM_BU_REF_PART P
INNER JOIN TABLE(fileId) F
ON P.NODE_ID = F.ID_T;
DELETE FROM T_CM_BU_REL_STRUCT
WHERE NODE_ID IN --删除T_CM_BU_REL_STRUCT节点构成
(SELECT NODE_ID
FROM T_CM_BU_REF_PART_NODE N
INNER JOIN TABLE(refPartId) R
ON N.REF_PART_ID = R.ID_T);
DELETE FROM T_CM_BU_REF_PART_NODE
WHERE REF_PART_ID IN --删除T_CM_BU_REF_PART_NODE零件节点
(SELECT ID_T FROM TABLE(refPartId));
DELETE FROM T_CM_BU_REF_PART
WHERE REF_PART_ID IN --删除T_CM_BU_REF_PART成本估算零件
(SELECT ID_T FROM TABLE(refPartId));
DELETE FROM T_CM_BU_DIR_STRUCT
WHERE NODE_ID IN --删除T_CM_BU_DIR_STRUCT文件夹
(SELECT ID_T FROM TABLE(fileId));
O_RESULT := '1';
O_MESSAGE := ' ';
RETURN;
EXCEPTION
WHEN OTHERS THEN
O_RESULT := '0';
O_MESSAGE := '删除文件夹出错';
RETURN;
end P_CM_DIRECTORY_DELETE;
create or replace procedure P_CM_DIRECTORY_RENAME
( I_NODE_ID IN VARCHAR2, --文件节点ID
I_NAME IN VARCHAR2, --新文件名
I_MODIFIER IN VARCHAR2, --操作人
O_RESULT OUT VARCHAR2, --错误结果 0 失败 1 成功
O_MESSAGE OUT VARCHAR2 --错误信息
)
is
/**
* 版权所有: 版权所有(C) 2017,联友科技
* 完成日期:2017年6月27日
* 作 者:张嘉俊
* 版 本:V1.0
**/
V_CNT NUMBER; -- 同目录重名文件数量
begin
SELECT COUNT(1) INTO V_CNT FROM T_CM_BU_DIR_STRUCT T --如果有文件名重复则退出储存过程
INNER JOIN T_CM_BU_DIR_STRUCT R ON T.NODE_ID=I_NODE_ID
AND T.P_NODE_ID=R.P_NODE_ID AND R.DEFINE_NODE_NAME=I_NAME;
IF V_CNT>0 THEN
O_RESULT:='0';
O_MESSAGE:='同目录有重名文件';
RETURN;
END IF;
UPDATE T_CM_BU_DIR_STRUCT SET DEFINE_NODE_NAME=I_NAME,MODIFIER=I_MODIFIER WHERE NODE_ID=I_NODE_ID;--更改文件名
O_RESULT:='1';
O_MESSAGE:=' ';
RETURN;
EXCEPTION
WHEN OTHERS THEN
O_RESULT:='0';
O_MESSAGE:='更新文件名出错';
RETURN;
end P_CM_DIRECTORY_RENAME;