【问题标题】:Get primary key value of record inserted in the table inside the stored procedure in Oracle获取Oracle存储过程内表中插入记录的主键值
【发布时间】:2021-10-12 15:25:34
【问题描述】:

我有一个名为 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 的新手,我不知道如何实现它,有人可以帮我解决这个问题

【问题讨论】:

  • 您实际使用的是哪种 DBMS 产品?是 MYSQL 还是 Oracle?
  • @AnkitBajpai 我正在使用 oracle
  • @mathguy 我是新手,感谢您的纠正我已经编辑了我的问题,也将提高我的写作技巧

标签: mysql oracle oracle-sqldeveloper


【解决方案1】:

如果你想在 Oracle 中解决,你可以使用 RETURNING 关键字返回最后插入的 ID -

 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;

【讨论】:

  • 我尝试了上面的代码,但它抛出了一个错误,说 PL/SQL SQL STATEMENT IGNORED AND ORA-00922: missing or invalid option
【解决方案2】:

我做了这个

    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;

成功了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2012-09-02
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多