Получить значение первичного ключа записи, вставленной в таблицу внутри хранимой процедуры в Oracle

avatar
Ronak Shethia
8 августа 2021 в 18:11
54
2
0

У меня есть таблица с именем users, где мой userId является первичным ключом и инкрементальным. Я пытаюсь написать хранимую процедуру, которая будет принимать пользовательские данные, и поскольку userId является инкрементным, она вернет userId, созданный после вставки этого запись.

Вот код моей хранимой процедуры:

CREATE OR REPLACE PROCEDURE sp_register_new_user 
    (firstname     IN VARCHAR2,
     lastname      IN VARCHAR2,
     phone_name    IN VARCHAR2,
     user_password IN VARCHAR2,
     email_id      IN VARCHAR2,
     userrole      IN NUMBER,
     udid          IN VARCHAR2,
     res           OUT NUMBER) 
AS
BEGIN
    INSERT INTO users (
        first_name,
        last_name,
        login,
        isactive,
        role_id,
        password,
        uuid,
        phonenumber
    ) VALUES (
        firstname,
        lastname,
        email_id,
        1,
        userrole,
        user_password,
        udid,
        phone_name
    );

  SELECT LAST_INSERT_ID();
END sp_register_new_user;

Я взял несколько ссылок, где говорится, что мне нужно написать эту строку, чтобы получить значение последней записи

SELECT LAST_INSERT_ID();

но я получаю сообщение об ошибке.

Кроме того, я хотел сделать это с помощью транзакций, но не знаю, как это сделать, поскольку не знаком с MySQL. Может ли кто-нибудь помочь мне решить эту проблему

Источник
Ankit Bajpai
8 августа 2021 в 19:06
0

Какой продукт СУБД вы на самом деле используете? Это MYSQL или Oracle?

Ronak Shethia
9 августа 2021 в 06:16
0

@AnkitBajpai Я использую оракул

Ronak Shethia
9 августа 2021 в 06:18
0

@mathguy Я новичок в этом, и спасибо за исправление. Я отредактировал свой вопрос, а также улучшу свои навыки письма.

Ответы (2)

avatar
Ankit Bajpai
8 августа 2021 в 19:05
0

Если вам нужно решение в Oracle, вы можете использовать ключевое слово RETURNING, чтобы вернуть последний вставленный идентификатор -

 CREATE OR REPLACE PROCEDURE sp_register_new_user (firstname     IN VARCHAR,
                                                   lastname      IN VARCHAR,
                                                   phone_name    IN VARCHAR,
                                                   user_password IN VARCHAR,
                                                   email_id      IN VARCHAR,
                                                   userrole      IN NUMBER,
                                                   udid          IN VARCHAR,
                                                   res           IN NUMBER
                                       ) AS

BEGIN
    INSERT INTO users (
        first_name,
        last_name,
        login,
        isactive,
        role_id,
        password,
        uuid,
        phonenumber
    ) VALUES (
        firstname,
        lastname,
        email_id,
        1,
        userrole,
        user_password,
        udid,
        phone_name
    ) RETURNING id INTO res;

END sp_register_new_user;
Ronak Shethia
9 августа 2021 в 06:20
0

Я попробовал приведенный выше код, но он выдает ошибку: PL/SQL SQL STATEMENT IGNORED AND ORA-00922: отсутствует или недействителен параметр

avatar
Ronak Shethia
9 августа 2021 в 06:35
0

Я сделал это

    INSERT INTO users (
    first_name,
    last_name,
    login,
    isactive,
    role_id,
    password,
    uuid,
    phonenumber
) VALUES (
    firstname,
    lastname,
    email_id,
    1,
    userrole,
    user_password,
    udid,
    phone_name
) RETURNING id INTO res;

и это сработало