0

我们可以在 Oracle 中将主键用作“普通列”吗?我正在尝试执行以下查询,但它不起作用:

SELECT DATA_1,DATA_2 FROM MY_TABLE WHERE MY_TABLE_PK=10;

我有一个无效的标识符错误:

 SQL Error: ORA-00904: "MY_TABLE_PK": invalid identifier

在这些情况下,我们如何读取主键值?

非常感谢您的时间。

4

3 回答 3

4

您的主键 INDEX 与所有约束一样基于表中的主键 COLUMN 。

您可以选择主键 COLUMN,但 INDEX 是数据库中的一个单独对象,并且本身不能被选择(无论如何您都不想选择)。在您的情况下,主键约束本身可能会在主键列中强制执行唯一性,并通过使用索引来减少搜索时间。

我认为您可能会对您的术语感到有些困惑。

user_ind_columns如果不确定,请查询字典视图以查找索引所基于的主键列:

SELECT *
  FROM user_ind_columns
 WHERE index_name = 'MY_TABLE_PK';

然后将基础 COLUMN(S)(可能不止一个)添加到您的选择查询中以使其返回。

希望能帮助到你...

于 2012-08-09T13:45:56.097 回答
1

主键是一个普通列,是的,您可以在 where 子句中选择或使用该列。

在您的 SQL 中,您选择 DATA_1 两次 - 您在表中有一个名为 MY_TABLE_PK 的列吗?

主键的名称显示在解释计划中,但您选择的数据将是列名称,而不是主键名称。

例如

CREATE TABLE supplier
(   supplier_id     numeric(10)     not null,
    supplier_name   varchar2(50)    not null,
    contact_name    varchar2(50),   
    CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
); 

这里的主键称为supplier_pk 并使用列supplyed_id,因此我们可以像这样进行选择

SELECT supplier_name from supplier where supplier_id=1234;
于 2012-08-09T13:39:09.110 回答
0

我假设 MY_TABLE 的主键是 MY_TABLE_PK。如果是这样,您发布的查询永远不会读取该列。尝试将您的查询更改为

SELECT MY_TABLE_PK, DATA_1
  FROM MY_TABLE
  WHERE MY_TABLE_PK = 10

这假设有一行 MY_TABLE_PK 包含 10。

分享和享受。

于 2012-08-09T13:36:12.300 回答