我们可以在 Oracle 中将主键用作“普通列”吗?我正在尝试执行以下查询,但它不起作用:
SELECT DATA_1,DATA_2 FROM MY_TABLE WHERE MY_TABLE_PK=10;
我有一个无效的标识符错误:
SQL Error: ORA-00904: "MY_TABLE_PK": invalid identifier
在这些情况下,我们如何读取主键值?
非常感谢您的时间。
我们可以在 Oracle 中将主键用作“普通列”吗?我正在尝试执行以下查询,但它不起作用:
SELECT DATA_1,DATA_2 FROM MY_TABLE WHERE MY_TABLE_PK=10;
我有一个无效的标识符错误:
SQL Error: ORA-00904: "MY_TABLE_PK": invalid identifier
在这些情况下,我们如何读取主键值?
非常感谢您的时间。
您的主键 INDEX 与所有约束一样基于表中的主键 COLUMN 。
您可以选择主键 COLUMN,但 INDEX 是数据库中的一个单独对象,并且本身不能被选择(无论如何您都不想选择)。在您的情况下,主键约束本身可能会在主键列中强制执行唯一性,并通过使用索引来减少搜索时间。
我认为您可能会对您的术语感到有些困惑。
user_ind_columns
如果不确定,请查询字典视图以查找索引所基于的主键列:
SELECT *
FROM user_ind_columns
WHERE index_name = 'MY_TABLE_PK';
然后将基础 COLUMN(S)(可能不止一个)添加到您的选择查询中以使其返回。
希望能帮助到你...
主键是一个普通列,是的,您可以在 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;
我假设 MY_TABLE 的主键是 MY_TABLE_PK。如果是这样,您发布的查询永远不会读取该列。尝试将您的查询更改为
SELECT MY_TABLE_PK, DATA_1
FROM MY_TABLE
WHERE MY_TABLE_PK = 10
这假设有一行 MY_TABLE_PK 包含 10。
分享和享受。