以下是我拥有的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 回答
回答您的问题上述oracle程序的替代解决方案是什么?试试这个程序,我假设你在AboutUs表中有ID列 . 如果列名称不同,则应使用正确的名称替换 .
对于第二个问题,即为什么会发生这种情况 - 我不知道,从未尝试过SQL Developer的内置功能来迁移数据库 .