【发布时间】:2013-10-10 13:28:11
【问题描述】:
您好,我是 Oracle 的新手,请帮我将以下 SQL Server 存储过程转换为 Oracle 存储过程。
下面显示了我正在尝试转换为 Oracle 的 SQL Server 存储过程,但由于时间太短我无法找到解决方案,请帮助我。
Create PROCEDURE dbo.myprocedure
@name VarChar(50),
@columnid VarChar(50),
@max Int OUTPUT
AS
DECLARE @period int,
@myStatement varChar(255)
SET @period = 99999
SET @max = 0
Create Table #newtable
(
valu INT
)
SET @myStatement = 'Insert INTO #newtable(valu) SELECT max( ' + @columnid + ') FROM ' + @name + ' WHERE ' +
@columnid+ ' <= ' + Convert(varChar(5), @period)
EXEC ( @myStatement )
SELECT @max = valu FROM #newtable
IF (@max = @period)
SET @max =-1
ELSE
SET @max= @max+ 1
DROP Table #newtable
GO
我就是这样改成oracle存储过程的
Create Table newtable( valu INT );
CREATE OR REPLACE
PROCEDURE PROCEDURE1
( name IN VARCHAR2
, columnid IN VARCHAR2
, maxid IN OUT VARCHAR2
)
as
period number;
mystatement varChar(255);
BEGIN
period:= 99999;
maxid:= 0;
mystatement:= 'Insert INTO newtable(valu) SELECT max(columnid) FROM name WHERE columnid <= Convert(varChar(5), period)';
SELECT maxid = valu FROM newtable;
EXECUTE immediate mystatement;
IF (maxid= period)
return maxid:=-1;
ELSE
return maxid:= maxid + 1;
DROP Table newtable;
END PROCEDURE1;
【问题讨论】:
-
以上在 sql server 中运行良好。我想在oracle中写同样的。我不知道怎么做?
-
回应@DStanley - 继续尝试用 PL/SQL 编写它。然后突出显示不适合您的特定特定方面。要求为您完成所有细节是不合理的,因为那是非常不合时宜的。
-
如果你看原文,它所做的就是从一张表的一列中获取最大值。我会弄清楚如何在 PL-SQL 中做到 that 而不是盲目地尝试在语法上进行转换。
标签: sql sql-server oracle stored-procedures