oracle select 语句 returns “没有行 selected”
oracle select statement returns “no rows selected”
我使用这样的 .tbl 文件创建了一个外部 table:
CREATE TABLE orders_load ( O_ORDERKEY INTEGER ,
O_CUSTKEY INTEGER ,
O_ORDERSTATUS CHAR(1) ,
O_TOTALPRICE DECIMAL(15,2),
O_ORDERDATE DATE,
O_ORDERPRIORITY CHAR(15),
O_CLERK CHAR(15),
O_SHIPPRIORITY INTEGER,
O_COMMENT VARCHAR(79))
organization external
(default directory user_directory
access parameters
(fields terminated by '|')
location('orders.tbl')
);
然后,select 来自 table 的所有行,我使用了:
select * from users_load;
但是我得到了这个错误:
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-30653: reject limit reached
然后使用下面的命令,上面的错误似乎已修复:
alter table users_load reject limit unlimited;
现在,当我执行这个命令时
select *
来自 users_load;
我没有收到任何错误,但我得到的结果是这样的:"no rows selected"。
(orders.tbl 文件超过 10.000.000 行)
每一行的格式为:
34155110|847435|O|190135.67|1998-04-21|4-NOT SPECIFIED|Clerk#000005134|0|posits wake quickly according to the car|
在日志文件中显示如下:ORA-01861 Literal does not match format string for column O_ORDERDATE.
您需要指定 DATE
列的格式。
类似这样的东西(现在无法测试)
CREATE TABLE orders_load ( O_ORDERKEY INTEGER ,
O_CUSTKEY INTEGER ,
O_ORDERSTATUS CHAR(1) ,
O_TOTALPRICE DECIMAL(15,2),
O_ORDERDATE DATE,
O_ORDERPRIORITY CHAR(15),
O_CLERK CHAR(15),
O_SHIPPRIORITY INTEGER,
O_COMMENT VARCHAR(79))
organization external
(
default directory user_directory
access parameters
(
fields terminated by '|'
(
O_ORDERKEY,
O_CUSTKEY,
O_ORDERSTATUS,
O_TOTALPRICE,
O_ORDERDATE DATE "YYYY-MM-DD", -- this needs to be in the format of your input file
O_ORDERPRIORITY,
O_CLERK,
O_SHIPPRIORITY,
O_COMMENT
)
)
location('orders.tbl')
);
根据我的经验,只需要定义 DATE
列的格式,对于所有其他列(尤其是数字),Oracle 会毫无问题地解决。
我使用这样的 .tbl 文件创建了一个外部 table:
CREATE TABLE orders_load ( O_ORDERKEY INTEGER ,
O_CUSTKEY INTEGER ,
O_ORDERSTATUS CHAR(1) ,
O_TOTALPRICE DECIMAL(15,2),
O_ORDERDATE DATE,
O_ORDERPRIORITY CHAR(15),
O_CLERK CHAR(15),
O_SHIPPRIORITY INTEGER,
O_COMMENT VARCHAR(79))
organization external
(default directory user_directory
access parameters
(fields terminated by '|')
location('orders.tbl')
);
然后,select 来自 table 的所有行,我使用了:
select * from users_load;
但是我得到了这个错误:
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-30653: reject limit reached
然后使用下面的命令,上面的错误似乎已修复:
alter table users_load reject limit unlimited;
现在,当我执行这个命令时
select * 来自 users_load;
我没有收到任何错误,但我得到的结果是这样的:"no rows selected"。
(orders.tbl 文件超过 10.000.000 行)
每一行的格式为:
34155110|847435|O|190135.67|1998-04-21|4-NOT SPECIFIED|Clerk#000005134|0|posits wake quickly according to the car|
在日志文件中显示如下:ORA-01861 Literal does not match format string for column O_ORDERDATE.
您需要指定 DATE
列的格式。
类似这样的东西(现在无法测试)
CREATE TABLE orders_load ( O_ORDERKEY INTEGER ,
O_CUSTKEY INTEGER ,
O_ORDERSTATUS CHAR(1) ,
O_TOTALPRICE DECIMAL(15,2),
O_ORDERDATE DATE,
O_ORDERPRIORITY CHAR(15),
O_CLERK CHAR(15),
O_SHIPPRIORITY INTEGER,
O_COMMENT VARCHAR(79))
organization external
(
default directory user_directory
access parameters
(
fields terminated by '|'
(
O_ORDERKEY,
O_CUSTKEY,
O_ORDERSTATUS,
O_TOTALPRICE,
O_ORDERDATE DATE "YYYY-MM-DD", -- this needs to be in the format of your input file
O_ORDERPRIORITY,
O_CLERK,
O_SHIPPRIORITY,
O_COMMENT
)
)
location('orders.tbl')
);
根据我的经验,只需要定义 DATE
列的格式,对于所有其他列(尤其是数字),Oracle 会毫无问题地解决。