微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Oracle中的同一存储过程中更新查询

如何解决在Oracle中的同一存储过程中更新查询

我想为同一存储过程中的同一表编写UPDATE的逻辑。下面是我的SP。

PROCEDURE INSERT_PROJECT_MST
(
  P_PROJECTNO IN NVARCHAR2,P_CRNO IN NVARCHAR2,P_APPNAME IN NVARCHAR2,P_APPFUNCDESC IN NVARCHAR2,P_AZUREFEATNO IN NVARCHAR2,P_AZUREFEATDESC IN NVARCHAR2,P_PROJMANAGER IN NVARCHAR2,P_PROJLEAD IN NVARCHAR2,P_REQBY IN NVARCHAR2,P_BUSInesSCAT IN NVARCHAR2,P_BUSInesSUSERCAT IN NVARCHAR2,P_FEATUREID IN NVARCHAR2,P_ISMGISRNO IN NVARCHAR2,P_REPLICARR IN NVARCHAR2,P_PRODRR IN NVARCHAR2,P_USERSTORY IN NVARCHAR2,P_ASSIGNEDBY IN NVARCHAR2,P_ASSIGNEDTO IN NVARCHAR2,P_CREATEDBY IN NVARCHAR2,P_LASTUPDBY IN NVARCHAR2,TBLDATA OUT NVARCHAR2
)
AS
  
  V_PROJ_ID NUMBER:=0;
  
  BEGIN
    
   -- SELECT COUNT(MST_ID) INTO V_PROJ_ID FROM TBL_PROJECT_MST_INFO WHERE PROJECT_NO = P_PROJECTNO;
   
   INSERT INTO TBL_PROJECT_MST_INFO      
                                   (
                                          PROJECT_NO,CR_NO,APPLICATION_NAME,APP_FUNC_DESC,AZURE_FEATURE_NO,AZURE_FEATURE_DESC,PROJECT_MANAGER_NAME,PROJECT_LEAD_NAME,REQUESTED_BY,BUSInesS_CATEGORY,BUSInesS_USER_CATEGORY,RATIONAL_FEATURE_ID,ISMG_ISR_NO,REPLICA_RR,PROD_RR,USER_STORY,ASSIGNED_BY,ASSIGNED_TO,CREATED_BY,LAST_UPDATED_BY,CREATED_DATE,LAST_UPDATED_DATE
                                    )
                                     VALUES
                                   (            
                                          P_PROJECTNO,P_CRNO,P_APPNAME,P_APPFUNCDESC,P_AZUREFEATNO,P_AZUREFEATDESC,P_PROJMANAGER,P_PROJLEAD,P_REQBY,P_BUSInesSCAT,P_BUSInesSUSERCAT,P_FEATUREID,P_ISMGISRNO,P_REPLICARR,P_PRODRR,P_USERSTORY,UPPER(P_ASSIGNEDBY),UPPER(P_ASSIGNEDTO),P_CREATEDBY,P_LASTUPDBY,SYSDATE,SYSDATE
                                   )                                   
                                   
                                   RETURNING V_PROJ_ID INTO TBLDATA;
          TBLDATA:='Record Saved Succesfully';  
          
END  INSERT_PROJECT_MST; 

下面也是同样的表格说明。

Name                   Null     Type           
---------------------- -------- -------------- 
ID                              NUMBER         
MST_ID                 NOT NULL NUMBER         
PROJECT_NO                      NVARCHAR2(100) 
CR_NO                           NVARCHAR2(100) 
APPLICATION_NAME                NVARCHAR2(255) 
APP_FUNC_DESC                   CLOB           
AZURE_FEATURE_NO                NVARCHAR2(155) 
AZURE_FEATURE_DESC              CLOB           
PROJECT_MANAGER_NAME            NVARCHAR2(100) 
PROJECT_LEAD_NAME               NVARCHAR2(100) 
REQUESTED_BY                    NVARCHAR2(100) 
BUSInesS_CATEGORY               NVARCHAR2(100) 
BUSInesS_USER_CATEGORY          NVARCHAR2(100) 
RATIONAL_FEATURE_ID             NVARCHAR2(100) 
ISMG_ISR_NO                     NVARCHAR2(100) 
REPLICA_RR                      NVARCHAR2(100) 
PROD_RR                         NVARCHAR2(100) 
USER_STORY                      NVARCHAR2(500) 
CREATED_BY                      NVARCHAR2(100) 
CREATED_DATE                    DATE           
ASSIGNED_TO                     NVARCHAR2(100) 
ASSIGNED_BY                     NVARCHAR2(100) 
IS_ACTIVE                       CHAR(1)        
LAST_UPDATED_BY                 NVARCHAR2(100) 
LAST_UPDATED_DATE               DATE           
COLUMN3                         VARCHAR2(20)   
COLUMN4                         VARCHAR2(20)   
COLUMN5                         VARCHAR2(20)  

注意 MST_ID是我的唯一身份列,我将基于此列来更新表格。

请帮助

解决方法

我不确定我是否理解您的要求。当前,您的过程在表中插入一行;您插入的值是过程的IN参数。

您希望能够通过调用相同的过程并传递相同的参数来更新同一表中的当前行?

如果是这样,合并可能是一个不错的选择。它也称为 upsert ,因为它能够在同一张表中插入行(不存在)或更新行(如果存在)。

这样的事情(简化;不希望输入那么多列):

error:NotRegistered

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。