首页 文章

从SQL Server 2008迁移到Oracle 12c后,将值插入表中的过程会导致错误

提问于
浏览
0

以下是我拥有的SQL Server 2008s存储过程:

CREATE PROCEDURE [dbo].[stp_InsertAboutUs]  
    @Text text  
    ,@Image varchar(500)  
    ,@CreatedBy uniqueidentifier  
    ,@ModifiedBy uniqueidentifier  
    ,@EntityId uniqueidentifier  
AS  
BEGIN  
    -- SET NOCOUNT ON added to prevent extra result sets from  
    -- interfering with SELECT statements.  
    SET NOCOUNT ON;             

    INSERT INTO [dbo].[AboutUS]([Text], [Image], [CreatedOn], 
                                [ModifiedOn], [CreatedBy], [ModifiedBy], [EntityId])  
    OUTPUT inserted.Id  
    VALUES (@Text, @Image, getdate(), getdate(), @CreatedBy, @ModifiedBy, @EntityId)
END

哪个工作正常,但是在我使用内置的SQL Developer将此代码迁移到Oracle 12c后,程序看起来很奇怪,如下所示:

create or replace 
PROCEDURE stp_InsertAboutUs
(
  v_Text IN CLOB DEFAULT NULL ,
  v_Image IN VARCHAR2 DEFAULT NULL ,
  v_CreatedBy IN CHAR DEFAULT NULL ,
  v_ModifiedBy IN CHAR DEFAULT NULL ,
  v_EntityId IN CHAR DEFAULT NULL 
)
AS
   v_temp INTO_%ROWTYPE;
   cv_ins SYS_REFCURSOR;    
BEGIN    
   -- SET NOCOUNT ON added to prevent extra result sets from  
   -- interfering with SELECT statements.  
--Why the below code here??
   AboutUS(TEXT,
           IMAGE,
           CreatedOn,
           ModifiedOn,
           CreatedBy,
           ModifiedBy,
           EntityId) ;
   LOOP
      FETCH cv_ins INTO v_temp;
      EXIT WHEN cv_ins%NOTFOUND;
      INSERT INTO INTO_ VALUES v_temp; -- What is INTO_ means?? 
   END LOOP;
   CLOSE cv_ins;
   OUTPUT(INSERTED.Id) ;
   VALUES_(v_Text,
           v_Image,
           SYSDATE,
           SYSDATE,
           v_CreatedBy,
           v_ModifiedBy,
           v_EntityId) ;
END;

为什么会发生这种情况,除了在其中包含Insert语句的过程出错外,所有过程都被正确迁移 . 另外,上述oracle程序的替代解决方案是什么?

提前致谢 .

1 回答

  • 1

    回答您的问题上述oracle程序的替代解决方案是什么?试试这个程序,我假设你在AboutUs表中有ID列 . 如果列名称不同,则应使用正确的名称替换 .

    create or replace procedure stp_InsertAboutUs(v_Text in clob default null,
                                                  v_Image in varchar2 default null,
                                                  v_CreatedBy in char default null,
                                                  v_ModifiedBy in char default null,
                                                  v_EntityId in char default null) as
       v_InsertedID AboutUs.Id%type;    
    begin
       -- SET NOCOUNT ON added to prevent extra result sets from
       -- interfering with SELECT statements.
       insert into AboutUS
          (Text, Image, CreatedOn, ModifiedOn, CreatedBy, ModifiedBy, EntityId)
       values
          (v_Text, v_Image, sysdate, sysdate, v_CreatedBy, v_ModifiedBy, v_EntityId)
       returning ID into v_InsertedID;
       dbms_output.put_line(v_InsertedID);
    end;
    

    对于第二个问题,即为什么会发生这种情况 - 我不知道,从未尝试过SQL Developer的内置功能来迁移数据库 .

相关问题