[英]Does oracle provide a built-in currency table for me to use as constraints?
我正在这样在Oracle 11g中创建一个表:
CREATE TABLE EXAMPLE (
ID VARCHAR2(10) PRIMARY KEY,
NAME VARCHAR2(100),
SHORT VARCHAR2(50),
CURRENCY CHAR(3)
);
是否可以在包含ISO货币的内置Oracle表中创建外键约束或甚至对CURRENCY
的检查约束 ?
对数据库没有很好的理解我也把其他可能存在的解决方案作为输入,但是我不想为此维护自己的表,如果工作太多,我会遇到用户错误。
谢谢。
您可以从oracle的内置视图中获取ISO货币列表:
select utl_i18n.GET_DEFAULT_ISO_CURRENCY(value) iso_cur
from v$nls_valid_values
where parameter = 'TERRITORY'
但正如Nuno Guerreiro所说,你需要根据这些结果创建一个表,并在新表中添加一个外键。
注意:编辑包含@ ABCade的建议。
遗憾的是,您无法直接添加约束,因为货币数据可通过系统视图获得。 但是,您可以使用该信息创建自己的表,然后创建外键。 这是一个如何做到这一点的例子。
CREATE TABLE currencies (
country VARCHAR2(30) PRIMARY KEY,
currency VARCHAR2(3) NOT NULL
);
INSERT INTO currencies
SELECT value country, utl_i18n.get_default_iso_currency(value) currency
FROM v$nls_valid_values
WHERE parameter = 'TERRITORY';
CREATE INDEX currencies_iso_idx ON currencies(currency) COMPUTE STATISTICS;
ALTER TABLE example ADD CONSTRAINT example_currency_fk FOREIGN KEY (currency)
REFERENCES currencies(currency);
上面的例子包括货币价值的指数,因为我怀疑你将要查询的是什么。
实际上我不明白“包含ISO货币的默认Oracle表”是什么意思(你的意思是Oracle PeopleSoft CURRENCY_CD_TBL表?),但一般来说你可以在创建后改变你的表以添加外键约束。 这是一个例子:
ALTER TABLE EXAMPLE
ADD CONSTRAINT fk_currency
FOREIGN KEY (CURRENCY)
REFERENCES put_parent_table_name_here(_corresponding_field_name_in_perent_table);
您还可以在CREATE TABLE语句中添加约束定义。 这是一个例子:
CREATE TABLE EXAMPLE (
ID VARCHAR2(10) PRIMARY KEY,
NAME VARCHAR2(100),
SHORT VARCHAR2(50),
CURRENCY CHAR(3),
CONSTRAINT fk_currency
FOREIGN KEY (CURRENCY)
REFERENCES put_parent_table_name_here(_corresponding_field_name_in_perent_table)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.