【问题标题】:Creating table in Oracle then inserting multiple fors with select在 Oracle 中创建表,然后使用 select 插入多个 fors
【发布时间】:2015-03-16 13:33:08
【问题描述】:

我将 Oracle 11G 与 Toad 10.6 一起使用。我正在尝试创建一个表,然后从一个 select 语句中插入行,该语句将从 1 个主表(产品 - 如下所示)和几个辅助表(我没有包括)中提取记录,这些辅助表在其余代码中加入过滤结果

create table mjhottemp 
(
CustID number (10),
CanvCD varchar2 (6),
CanvISS number (3)
);
COMMIT;
Insert into MJHOTTEMP
(custid, canvcd, canviss)
SELECT DISTINCT
   r.CUSTOMER_ID AS custid, r.CANVASS_CODE AS canvcd, r.CANVASS_ISSUE_NUM as canviss

FROM core.product r

当我运行它时,“插入到 MJHOTTEMP”行中出现错误

ORA-00942: table or view does not exist

我在架构中看到了表。任何想法为什么这不起作用?

【问题讨论】:

  • 运行select table_name from user_tables where upper(table_name) = 'MJHOTTEMP';时看到了什么?
  • 与你的问题无关,但“create table”后面的“commit”不是必须的。
  • 数据网格在列标题中显示 table_name,并且 MJHOTTEMP 作为唯一的行。
  • 我认为我不需要提交,但正在尝试我能想到的一切

标签: oracle plsql insert create-table


【解决方案1】:

这通常是权限错误。验证您连接的用户是否(至少)在 core.product 表上进行了选择。

GRANT SELECT ON core.product TO 'your_user';

我假设您没有使用自定义用户功能或从其他用户拥有的视图或过程中进行选择。在这种情况下,您可能需要添加

GRANT SELECT ON core.product TO 'your_user' WITH REFERENCES;

【讨论】:

  • 我知道我对该表具有选择权限,因为我在验证输出是否正确时在早期版本的查询中从中选择了记录。
  • 在您的建议的帮助下我发现了问题。我已经重命名了一些属于其余查询的表,并且没有更新对这些表的引用。这纯粹是用户错误。很抱歉占用您的时间。
【解决方案2】:

有关此表的错误消息:core.product

【讨论】:

  • 我不认为这是一个“选择”问题,因为当我验证我是否获得了正确的记录时,我能够在初步版本中运行完整的选择语句。当我尝试将记录插入 MJHOTTEMP 表时,我只会收到错误消息。所以你是说我需要对 core.product 表的插入权限才能在 MJHOTTEMP 表上插入记录?
  • 也许你需要授予 MJHOTTEMP 的 INSERT 权限
  • 其他表(不包括在内)怎么样: 1. 尝试选择; 2.尝试插入值
  • 我可以授予自己这些权限吗?其他表是我成功运行多次的完整选择语句的一部分。
  • 1.仅尝试 INSERT 语句的 SELECT 部分,2. 尝试 INSERT INTO MJHOTTEMP VALUES (...一些虚拟值...)
猜你喜欢
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2013-05-23
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多