我有一个表,有两列“col\u a”和“col\u b”,我通过一次插入一行来创建:
COL_A COL_B
20200330 49
20200413 31
20200420 19
20200511 99
20190318 73
20190401 86
我想在节目结束时请a列订购这张table。我想通过运行一个 ALTER TABLE
命令后,我填写了表格,所以我尝试:
PROC SQL;
CONNECT TO ORACLE (USER=XXX ORAPW=XXX PATH=XXX);
EXECUTE (
ALTER TABLE SCHEMA.TABLE
ORDER BY COL_A
) BY ORACLE;
DISCONNECT FROM ORACLE;
QUIT;
但我明白了
ERROR: ORACLE execute error: ORA-01735: opción ALTER TABLE no válida.
当然,我可以用col_a排序的这个原始表的数据创建另一个表,但是我想知道我是否可以就地创建它。
我在sas中使用oraclesql。
3条答案
按热度按时间p8ekf7hl1#
在sql中,表表示无序的集合。查询数据时只能对表进行排序:
如果您关心性能,可以在上添加索引
(col_a)
--因此使用索引而不是实际排序。注意:对于视图,缺少顺序也是如此。如果你想要一个有序的结果集,你需要使用
order by
在查询中。ego6inou2#
你说的是两件不同的事:
1.如果要在proc\u sql进程中对结果进行排序
顺便说一下,您可能希望在sas中使用libname来连接到oracle,因此不需要每次都构建connect。
2.运行ddl语句。不存在alter table x order by这样的事情。为了在oracle中对列进行排序,您有索引。
但是,我认为使用sas运行ddl语句是一种非常糟糕的做法。如果要对结果排序,只需对查询排序。此外,运行ddl语句要求通过sas连接的用户被授予正确的特权,这在世界上任何公司都是不可能的。请记住,您使用sas是为了进行分析,因此dba通常只向通过sas连接的用户授予读取权限。
希望能澄清。
mqkwyuun3#
您可以简单地像下面所示的示例一样,参考https://www.oracletutorial.com/oracle-basics/oracle-order-by 了解其中的变化。