【发布时间】:2017-01-04 23:37:35
【问题描述】:
Oracle SQL 开发人员可以做这样的事情吗
CREATE FUNCTION fnCheckValid(accountidd IN NUMBER)
RETURN NUMBER
IS retval NUMBER(4,0);
BEGIN
SELECT COUNT(accountid_fk)
INTO retval
FROM tbl_AccountAuthentications
WHERE accountid_fk = accountidd;
RETURN(retval);
END;
/
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheckValid(accountid_fk) <= 1);
我不断收到的错误是
Error starting at line 999 in command:
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheckValid(accountid_fk) <= 1)
Error report:
SQL Error: ORA-00904: "FNCHECKVALID": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
正在创建该函数,我可以找到它,但是当我尝试调用它时,我不断收到该错误
这就是我想要实现的目标
AccountID RegularID OpenID
1 5 null
1 null 10
1 null 11
1 6 <-- Forbidden
这样一个用户就不能创建 2 个常规帐户,但可以拥有任意数量的 OpenID 帐户
表格设置如下
CREATE TABLE tbl_AccountAuthentications(
newAuthID NUMBER(4,0)
CONSTRAINT naid_pk PRIMARY KEY,
accountid_fk NUMBER(4,0)
CONSTRAINT accid_fk
REFERENCES tbl_UserAccounts(account_id),
regularid_fk NUMBER(4,0)
CONSTRAINT rgid_fk
REFERENCES tbl_StrongRoom(password_id),
openid_fk NUMBER(4,0)
CONSTRAINT opid_fk
REFERENCES tbl_OpenID(openid)
);
【问题讨论】:
-
您只是想确保 accountid_fk 是唯一的吗?
-
用我想做的编辑,同样,'SYS'在那里作为测试忘记删除它,但删除'SYS'后仍然有这个错误
-
普通账户和开户是同一张表吗?
-
用请求的数据编辑,是的,它们在同一个表中
-
Oracle 中的CHECK 约束不能调用用户定义的函数。参考here.
标签: sql oracle oracle-sqldeveloper