以下是Sqlserver中的写法,实现同样的功能,在Oracle中该如何实现?SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
---------------------
--根据指定的表名称获取一个唯一的ID值
---------------------
ALTER proc [dbo].[GET_IID]
@TableName nvarchar(50) 
as
declare @ID bigint
set @ID=0
update GetIID set @ID = IID = IID + 1 where TableName = @TableName
select @ID

解决方案 »

  1.   

    有点迷糊,不用SQL好多年,
    update GetIID set @ID = IID = IID + 1 where TableName = @TableName,扑通啊扑通,帮你顶
      

  2.   

    create procedure GET_IID(TableName IN nvarchar(50), NEWID OUT INT)
    AS 
    v_sql varchar2(20);
    BEGIN 
    v_sql:='update GetIID set IID = IID + 1  where TableName = '|| TableName;
    execute immediate v_sql INTO NEWID ;
    END;
    试试
      

  3.   


    --没测试,自己运行下试试:
    create procedure GET_IID(TableName IN varchar2(50), i_result out integer)
    as
    begin
     
        update GetIID 
          set IID = IID + 1  
       where TableName = '|| TableName
      returning IID INTO i_result;
     
        commit;
    end; 
      

  4.   

    试下这个.--没测试,自己运行下试试:
    create procedure GET_IID(str_tablename IN varchar2(50), i_result out integer)
    as
    begin
     
        update GetIID 
          set IID = IID + 1  
       where TableName = str_tablename
      returning IID INTO i_result;
     
        commit;
    end; 
      

  5.   

    不行呀,兄弟,创建完成后显示:
    PROCEDURE GET_IID 已编译
    Errors: check compiler log创建出来的存储过程在Sql Developer中看到的是红X,这可怎么办?
      

  6.   

    谢谢大家的热心帮助,问题解决了,采用qq646748739的方法,代码如下:CREATE OR REPLACE PROCEDURE GET_IID
    (
      str_tablename in varchar2  
    , i_result out number  
    ) AS 
    BEGIN
          update GetIID 
          set IID = IID + 1  
       where TableName = str_tablename
      returning IID INTO i_result; 
        commit;
    END GET_IID;开始的错误是:不知道为什么字段类型后面不可以加括号,加了就错,不过无所谓了,能用就行。