储存过程记录

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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值