我已经使用两种方法在“ 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] 删除。
我来说两句