使用'odbc','DBI'包从R创建表时,在Oracle 11g中无法使用“从<table_name>选择*”

拉贾·萨哈(Raja Saha)|

我已经使用两种方法在“ Oracle Database 11g Express Edition”中创建了一些表:

方法1:从R使用odbc和DBI包

library(odbc)
db <- odbc::dbConnect(odbc::odbc(),
                'Oracle ODBC',
                uid = "raja",
                pwd = "test123")

并创建一个表“汽车”。

DBI::dbWriteTable(conn = db, name = "cars", value = cars,
             append = T, row.names = F, overwrite = F)

方法2:在sqlplus命令提示符下

create table my_table 
(id int not null,
 text varchar2(1000),
 primary key (id)
);

insert into my_table (id, text) values (1, 'This is some text.');

为了验证我已经运行

SQL> select table_name from user_tables;
cars
mtcars
MY_TABLE

显然,它创建了表。

现在的问题是:当尝试查看/读取表时,成功和错误出现在以下模式中。

从R:

成功:

> DBI::dbReadTable(db, "cars")

错误:

> DBI::dbReadTable(db, "my_table")
Error: <SQL> 'SELECT * FROM "my_table"'
  nanodbc/nanodbc.cpp:1587: 42S02: [Oracle][ODBC][Ora]ORA-00942: table or view does not exist

错误:

> DBI::dbGetQuery(db, "select * from cars;")
Error: <SQL> 'select * from cars;'
  nanodbc/nanodbc.cpp:1587: 42S02: [Oracle][ODBC][Ora]ORA-00942: table or view does not exist

从sqlplus中:

成功:

select * from my_table;

错误:

select * from cars;
ERROR at line 1:
    ORA-00942: table or view does not exist

请帮忙。谢谢。

亚历克斯·普尔

您的DBI调用正在使用name = "cars",从查询中您可以看到user_tables该表是用带引号的标识符名称创建,该表将其显示为小写cars您使用的未加引号的标识符my_table,因此该查询结果中的字母为大写。

正如cars带引号的标识符一样,您必须在所有地方都引号:

select * from "cars";

但这是一种痛苦,没有人会感谢您使用带引号的标识符(最好是完全避免使用它们,除非基于某些原因,您必须根据上面链接的文档中的规则使用带引号的名称);因此最好将您的DBI调用更改为使用:

name = "CARS"

这将导致使用不带引号的标识符创建表,这意味着您的原始文件dbGetQuery现在无论如何都可以使用表名-这是任何不带引号的标识符都是正确的(因此from my_table起作用)。

您还需要将您的dbReadTable呼叫更改为也使用大写字母"CARS""MY_TABLE",以解决所看到的错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过 DBI 和 ODBC 使用 R 连接到 Teradata

使用R,ODBC和DBI的数值超出范围

使用odbc / DBI从R中的存储过程结果中检索输出

PLSQL:如何使用变量作为table_name创建游标

使用R + DBI库+ ODBC连接到Teradata数据库

SQL:如何使用信息架构中的Table_Name和Pivoted Column_Name构建选择查询

如何在OSX和Windows VM上使用R + DBI + ODBC连接到Teradata数据库

我可以使用“ CREATE LOCAL TEMPORARY TABLE table_name();” [或类似](oracle存储过程)

使用 R DBI 包获取 SQL 表的完整“路径”

使用C#从Excel工作表中删除不必要的“ TABLE_NAME”

如何使用 R DBI 创建视图?

R中的ODBC / DBI将不会写入R中具有非默认架构的表

在Oracle中,TABLE_NAME与“ TABLE_NAME”之间的区别是什么?

使用 R 的 ODBC 连接

PERL:DBI connect('','system',...)失败:ERROR OCIEnvNlsCreate在使用dbi个人软件包时

R 使用 RSQLite 和 dbplyr 从 DBI 包中的函数查找 sql 数据库中的表时遇到问题

R使用dbi更新数据库

在Oracle 11g中使用SDO几何创建物化视图时无法使用ORDER BY

使用R(DBI程序包)从SQL Server表中删除行

如何使用 ODBC 包从 R 更改 SQL 表的 vartypes?

如何在Oracle SQL 11g中使用行值动态选择列名?

Mysql2 :: Error:表'table_name'不存在:从`table_name`中显示完整字段

使用VBA创建ODBC DSN

使用ODBC命令选择时出现错误“ ORA-00933:SQL命令未正确结束”

在直线中,使用“create table table_name as select * from”不起作用

使用DBI连接到MSSQL

从文件读取密码时,使用perl dbi获取“拒绝访问”

如何收集使用DBI执行语句时发生的错误?

在查询Cassandra中使用实体类名称而不是@Table(“ table_name”)的Spring Data