【发布时间】:2014-12-18 16:12:15
【问题描述】:
我正在尝试将客户 id pk 列从报告页面检索到表单页面,每当用户使用 oracle application express 从报告页面移动到表单页面时,该列就会自动递增。所以我正在尝试创建一个触发器返回一个数字,该数字具有最后一行的值以及 +1 的增量。但是我得到这个错误
Error at line 8: PLS-00103: Encountered the symbol "(" when expecting one of the following:
, from
6. INTO number
7. FROM (SELECT a.cust_id, max(cust_id) over() as max_pk FROM customer a)
8. WHERE cust_id = max_pk;
9. number:=(cust_id+1);
10. END;
这是我的 PL/SQL 过程。
CREATE OR REPLACE FUNCTION cust_id_incremental(cust_id IN number)
RETURN number;
BEGIN
SELECT cust_id
INTO number
FROM (SELECT a.cust_id, max(cust_id) over() as max_pk FROM customer a)
WHERE cust_id = max_pk;`enter code here`
number:=(cust_id+1);
END;
【问题讨论】:
-
这是一种糟糕的填充主键的方法。您将不可避免地有多个会话同时生成相同的 ID
-
那么你有什么推荐的。我应该为我的 pk 列创建一个序列吗?
-
是的,您应该使用序列。这就是他们的目的。
标签: oracle plsql plsqldeveloper