错误测试 PL/SQL 插入存储过程

Error Testing PL/SQL Insert Stored Proc

我是 Oracle 和存储过程的新手。我在获取使用 SQL Developer 写入 运行 的简单存储过程时遇到了一些问题。

这是我的存储过程:

CREATE OR REPLACE PROCEDURE sp_user_create(
  user_row IN t_user%ROWTYPE)
IS
BEGIN
  INSERT INTO T_USER (FIRST_NAME,LAST_NAME,EMAIL)
  VALUES(user_row.FIRST_NAME, user_row.LAST_NAME, user_row.EMAIL);
  COMMIT;

  EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
      RAISE;

END sp_user_create;

当我尝试使用 SQL 开发人员 运行 它时,我得到以下屏幕。

它抱怨行 USER_ROW PL/SQL RECORD is not valid but SQL Developer generated this?

更新:

我通过使用以下代码进行测试使其正常工作。

DECLARE
  USER_ROW t_user%rowtype;
BEGIN
  --USER_ROW := ('BOB','MALAKI','sithlord@google.com');
  USER_ROW.FIRST_NAME := 'BOB';
  USER_ROW.LAST_NAME := 'MALAKI';
  USER_ROW.EMAIL := 'MALIKI@power.com';

  SP_USER_CREATE(
    USER_ROW => USER_ROW
  );
--rollback; 
END;

问题仍然存在,尽管 USER_ROW 可以在一行中定义而不是单独设置每一列吗?当有很多列时,这可能会很乏味。

"PL/SQL record" 只是实际数据类型的占位符,而不是数据类型本身,因为 sql 开发人员没有使用数据字典确定它的可靠方法。将其替换为 "t_user%rowtype",这是一种 user_row 参数。

我对已接受的答案有补充。 可以使用 select:

设置 USER_ROW
select 'BOB' as FIRST_NAME, 'MALAKI' as LAST_NAME, 'MALIKI@power.com' as EMAIL 
into USER_ROW from dual;

您还可以将另一个 table 的值 select 转换为 USER_ROW。

P.S.: 此外,而不是行:

INSERT INTO T_USER (FIRST_NAME,LAST_NAME,EMAIL)
VALUES(user_row.FIRST_NAME, user_row.LAST_NAME, user_row.EMAIL);

在你的存储过程中,你可以这样写:

INSERT INTO T_USER VALUES user_row;

您可以看到一些附加信息: Oracle: Insert rowtype data into another table