我们可以在Oracle中使用主键作为“普通列”吗? 我正在尝试执行以下查询,但它不起作用:
SELECT DATA_1,DATA_2 FROM MY_TABLE WHERE MY_TABLE_PK=10;
我有一个无效的标识符错误:
SQL Error: ORA-00904: "MY_TABLE_PK": invalid identifier
在这些情况下,我们如何读取主键值?
非常感谢你的时间。
答案 0 :(得分:4)
您的主键INDEX基于表格中的主键COLUMN,全部为constraints。
您可以选择主键COLUMN,但INDEX是数据库中的单独对象,无法自行选择(您无论如何都不想要)。在您的情况下,主键约束本身可能强制主键列中的唯一性,以及通过使用索引减少搜索时间。
我认为你的术语可能会有些混乱。
如果您不确定,请查询user_ind_columns
字典视图以查找索引所基于的主键列:
SELECT *
FROM user_ind_columns
WHERE index_name = 'MY_TABLE_PK';
然后将基础COLUMN(S)(可能不止一个)添加到您的选择查询中以使其返回。
希望它有所帮助...
答案 1 :(得分:1)
主键是普通列,是的,您只需选择或使用where子句中的列即可。
在SQL中,您选择DATA_1两次 - 表中是否有一个名为MY_TABLE_PK的列?
主键的名称显示在解释计划中,但您选择的数据将是列名,而不是主键名。
e.g。
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,使用的是submission_id列,所以我们可以像这样选择
SELECT supplier_name from supplier where supplier_id=1234;
答案 2 :(得分:0)
我假设MY_TABLE的主键是MY_TABLE_PK。如果是这样,您发布的查询永远不会读取该列。尝试将您的查询更改为
SELECT MY_TABLE_PK, DATA_1
FROM MY_TABLE
WHERE MY_TABLE_PK = 10
这假设MY_TABLE_PK包含10行。
分享并享受。