首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL存储过程-请帮我写这篇文章!(第二部分)

SQL存储过程-请帮我写这篇文章!(第二部分)
EN

Stack Overflow用户
提问于 2010-07-01 00:58:41
回答 3查看 95关注 0票数 2

下面的表格中包含值501。

代码语言:javascript
运行
复制
CREATE TABLE _Numbers(
    Number numeric(20,0) NOT NULL PRIMARY KEY
)
INSERT INTO _Numbers VALUES(501)

我如何写一个存储的proc,它返回501,并按顺序递增Number (即502)?我希望每次调用存储的proc时都重复此行为。

(另外,我如何从任何查询中调用这个存储的proc?)

3151056是我之前问题的一部分。

谢谢,

伏都教

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-01 01:05:27

代码语言:javascript
运行
复制
CREATE OR REPLACE PROCEDURE read_and_increment (number_just_read OUT NUMBER)
IS
BEGIN
   DECLARE
      stored_number   NUMBER DEFAULT NULL;
   BEGIN
      SELECT number
        INTO stored_number
        FROM _numbers
       WHERE ROWNUM = 1;

      number_just_read := stored_number;

      UPDATE _numbers
         SET number = number + 1;

      COMMIT;
   END;
END read_and_increment;
票数 1
EN

Stack Overflow用户

发布于 2010-07-01 01:06:25

使用IDENTITY列,它会为您负责编号和递增。

任何返回的数字都可能已被另一个连接/客户端/进程使用

票数 3
EN

Stack Overflow用户

发布于 2010-07-01 01:17:49

您正在从旧表中导入数据,对吗?如果您在identity关闭的情况下从旧表导入数据,然后设置具有最高number+1的identity,并继续使用identity。

另一种方法是在插入时使用触发器,该触发器将检查NumberItem是否为null,如果为null,它将添加Max+1。如果没有,什么也不做。

我不认为SP是一个好的解决方案。我很确定你不需要这些东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3151548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档