SQL сохранен proc - помогите мне написать этот, пожалуйста!(часть 2) - PullRequest
2 голосов
/ 30 июня 2010

У меня есть следующая таблица со значением 501 в ней ..

CREATE TABLE _Numbers(
    Number numeric(20,0) NOT NULL PRIMARY KEY
)
INSERT INTO _Numbers VALUES(501)

Как я могу написать сохраненный процесс для этого, который возвращает мне 501 и увеличивает Number до следующего по порядку (то есть 502)?Я хотел бы, чтобы это поведение повторялось каждый раз, когда вызывается сохраненный процесс.

(Кроме того, как я могу вызвать этот сохраненный процесс из любого запроса?)

Часть моего предыдущего вопроса 3151056.

Спасибо,

Voodoo

Ответы [ 3 ]

3 голосов
/ 30 июня 2010

Используйте столбец IDENTITY, который позаботится о нумерации и увеличении для вас.

Любой возвращаемый номер может быть уже использован другим подключением / клиентом / процессом

2 голосов
/ 30 июня 2010

Вы импортируете данные из старых таблиц, верно? Что делать, если вы импортируете данные из старых таблиц с отключенной идентификацией, и после этого вы устанавливаете идентификацию с наибольшим числом + 1 и продолжаете свою жизнь, используя идентификацию.

Другой подход заключается в использовании триггера при вставке, который будет проверять, является ли NumberItem нулевым, и добавит ли Max + 1, если он нулевой. Если нет, ничего не делай.

Я не думаю, что SP - хорошее решение. И я уверен, что тебе не нужны все эти вещи.

1 голос
/ 30 июня 2010
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;
...