我知道SQL Server。在一个使用Oracle的项目上,并且有时间做事。我目前的问题是我们有一个类似于以下内容的表:
ACCOUNT_ID NUMBER
SEQUENCE_ID NUMBER
DISPLAY_NAME VARCHAR2
TOKEN VARCHAR2
PAYMENT_TYPE NUMBER
Account_ID可以在此表中多次出现。我需要的是Sequence_ID需要为每个Account_ID唯一递增。所以看起来像这样。
ACCOUNT_ID SEQUENCE_ID DISPLAY_NAME TOKEN PAYMENT_TYPE
------------------------------------------------------------------
111111 1 Primary abcd 1
222222 1 Primary bcde 1
222222 2 Secondary dffs 1
333333 1 Default fdsf 2
111111 2 Alternate sfff 2
222222 3 Another slsl 1
如您所见,Account_ID为11111有2条记录,Sequence_ID不会重复该Account_ID。基本上,Sequence_ID是自动递增的,但对于每个Account_ID都是唯一的。
这可能吗?
答案 0 :(得分:2)
您可以将所有逻辑封装在一个过程中:
CREATE OR REPLACE PROCEDURE create_Account(
in_account_id IN ACCOUNTS.ACCOUNT_ID%TYPE,
in_display_name IN ACCOUNTS.DISPLAY_NAME%TYPE,
in_token IN ACCOUNTS.TOKEN%TYPE,
in_payment_type IN ACCOUNTS.PAYMENT_TYPE%TYPE
)
AS
p_seq_id ACCOUNTS.SEQUENCE_ID%TYPE;
BEGIN
SELECT COUNT(*) + 1
INTO p_seq_no
FROM ACCOUNTS
WHERE ACCOUNT_ID = in_account_id;
INSERT INTO ACCOUNTS (
account_id,
sequence_id,
display_name,
token,
payment_type
) VALUES (
in_account_id,
p_seq_id,
in_display_name,
in_token,
in_payment_type
);
END;
/
或者你可以使用INSERT
INSERT INTO ACCOUNTS
SELECT :account_id,
COUNT(*) + 1,
:display_name,
:token,
:payment_type
FROM ACCOUNTS
WHERE account_id = :account_id;
答案 1 :(得分:0)
我认为最容易解决问题的方法是在桌面上创建一个触发器,如下所示:
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
答案 2 :(得分:0)
如上面的答案所示,你可以使用Procedure来 做这个。如果您不想使用过程中的所有内容,则可以使用 函数,因为您可以以任何方式使用函数的返回值。希望这个 帮助
CREATE OR REPLACE FUNCTION create_Account(
in_account_id IN ACCOUNTS.ACCOUNT_ID%TYPE,
in_display_name IN ACCOUNTS.DISPLAY_NAME%TYPE,
in_token IN ACCOUNTS.TOKEN%TYPE,
in_payment_type IN ACCOUNTS.PAYMENT_TYPE%TYPE
)
RETURN PLS_INTEGER
AS
p_seq_id ACCOUNTS.SEQUENCE_ID%TYPE;
BEGIN
SELECT COUNT(*) + 1
INTO p_seq_no
FROM ACCOUNTS
WHERE ACCOUNT_ID = in_account_id;
RETURN p_seq_no;
END;