繁体   English   中英

oracle是否提供内置货币表供我用作约束?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM