问题描述:
我将SqlServer的一个存储过程导入Oracle过程中出现这样的问题,存储过程新建时
没有报任何的错误,但是一调用就报错,重新编译也编译不了,代码如下:CREATE OR REPLACE PROCEDURE NEXT_VAL
AS
BEGIN
BEGIN TRANSACTION
declare :NEXT_VAL INTEGER
SELECT :NEXT_VAL = VAL FROM SEQ_SEED UPDLOCK
--此句才是真正上锁
UPDATE SEQ_SEED SET VAL= VAL + 1
SELECT :NEXT_VAL = VAL FROM SEQ_SEED
SELECT VAL as NEXT_VAL FROM SEQ_SEED
COMMIT
return :NEXT_VALEND
我将SqlServer的一个存储过程导入Oracle过程中出现这样的问题,存储过程新建时
没有报任何的错误,但是一调用就报错,重新编译也编译不了,代码如下:CREATE OR REPLACE PROCEDURE NEXT_VAL
AS
BEGIN
BEGIN TRANSACTION
declare :NEXT_VAL INTEGER
SELECT :NEXT_VAL = VAL FROM SEQ_SEED UPDLOCK
--此句才是真正上锁
UPDATE SEQ_SEED SET VAL= VAL + 1
SELECT :NEXT_VAL = VAL FROM SEQ_SEED
SELECT VAL as NEXT_VAL FROM SEQ_SEED
COMMIT
return :NEXT_VALEND
RETURN NUMBER
AS
VAR_NEXT_VAL SEQ_SEED.VAL%TYPE;
BEGIN
UPDATE SEQ_SEED SET VAL= VAL + 1;
SELECT VAL into VAR_NEXT_VAL FROM SEQ_SEED;
return VAR_NEXT_VAL;
END;
/如果SEQ_SEED就是一个sequence的话,
直接
select SEQ_SEED.nextVal from dual就可以返回了,用不着自己建函数。。希望楼主说的是从sqlserver导到oracle,而不是从oracle导到sqlserver。
嗯,存储过程你要取出值,必须有out参数。如果没有out参数又要返回值,那就得用函数,但是函数只能返回一个值(游标啊、char啊、自定义类型啊之类反正只能返回一个值),考虑到你这里只要一个值,所以用了个函数。