【发布时间】:2017-09-17 19:41:42
【问题描述】:
我有一个名为Users 的表,其中只有两列id(NUMBER 类型)和Name(VARCHAR2 类型)。所有列都不可为空
我创建了一个只接受一个参数(新用户名)的 SQL 过程,如下所示:
CREATE OR REPLACE PROCEDURE insert_new_user
(
this_name VARCHAR2;
)
AS
BEGIN
INSERT INTO Users
VALUES (this_name);
COMMIT;
END;
/
该过程编译但出现以下错误:错误 ORA-00947:没有足够的值。
当我按如下方式运行它时:
BEGIN
insert_new_user ('Bob');
END
/
它会引发 PL/SQL 编译错误。
如何设置id列自动输入下一个数字而不需要通过参数传递?
理想的输出是这样的场景:
身份证名称
1 亚当
2本
3 鲍勃
其中Bob 是插入到user 表中的新用户行,3 是自动添加到id 列中的数字。
【问题讨论】:
-
Id 列是标识列?
-
对,就是PK
-
主键和身份不一样。标识列值是自动递增的。在您的情况下,如果 id 列是主键但不是自动增量,那么在表中插入行时您必须为其提供一个值。下面@Dan 的回答应该提供有关自动增量列的更多详细信息。
标签: sql oracle plsql parameter-passing procedure