oracle sql-alter table order by

gc0ot86w  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(474)

我有一个表,有两列“col\u a”和“col\u b”,我通过一次插入一行来创建:

  1. COL_A COL_B
  2. 20200330 49
  3. 20200413 31
  4. 20200420 19
  5. 20200511 99
  6. 20190318 73
  7. 20190401 86

我想在节目结束时请a列订购这张table。我想通过运行一个 ALTER TABLE 命令后,我填写了表格,所以我尝试:

  1. PROC SQL;
  2. CONNECT TO ORACLE (USER=XXX ORAPW=XXX PATH=XXX);
  3. EXECUTE (
  4. ALTER TABLE SCHEMA.TABLE
  5. ORDER BY COL_A
  6. ) BY ORACLE;
  7. DISCONNECT FROM ORACLE;
  8. QUIT;

但我明白了

  1. ERROR: ORACLE execute error: ORA-01735: opción ALTER TABLE no válida.

当然,我可以用col_a排序的这个原始表的数据创建另一个表,但是我想知道我是否可以就地创建它。
我在sas中使用oraclesql。

p8ekf7hl

p8ekf7hl1#

在sql中,表表示无序的集合。查询数据时只能对表进行排序:

  1. select t.*
  2. from schema.table t
  3. order by t.col_a;

如果您关心性能,可以在上添加索引 (col_a) --因此使用索引而不是实际排序。
注意:对于视图,缺少顺序也是如此。如果你想要一个有序的结果集,你需要使用 order by 在查询中。

ego6inou

ego6inou2#

你说的是两件不同的事:
1.如果要在proc\u sql进程中对结果进行排序

  1. proc sql;
  2. CONNECT TO ORACLE (USER=XXX ORAPW=XXX PATH=XXX);
  3. EXECUTE (
  4. SELECT * FROM SCHEMA.TABLE
  5. ORDER BY COL_A
  6. ) BY ORACLE;
  7. DISCONNECT FROM ORACLE;
  8. quit;

顺便说一下,您可能希望在sas中使用libname来连接到oracle,因此不需要每次都构建connect。
2.运行ddl语句。不存在alter table x order by这样的事情。为了在oracle中对列进行排序,您有索引。

  1. proc sql;
  2. CONNECT TO ORACLE (USER=XXX ORAPW=XXX PATH=XXX);
  3. execute(CREATE INDEX SCHEMA.YOUR_INDEX_NAME ( COL_A ) on SCHEMA.TABLE ) BY ORACLE;
  4. quit;

但是,我认为使用sas运行ddl语句是一种非常糟糕的做法。如果要对结果排序,只需对查询排序。此外,运行ddl语句要求通过sas连接的用户被授予正确的特权,这在世界上任何公司都是不可能的。请记住,您使用sas是为了进行分析,因此dba通常只向通过sas连接的用户授予读取权限。
希望能澄清。

展开查看全部
mqkwyuun

mqkwyuun3#

您可以简单地像下面所示的示例一样,参考https://www.oracletutorial.com/oracle-basics/oracle-order-by 了解其中的变化。

  1. SELECT
  2. name,
  3. address,
  4. credit_limit
  5. FROM
  6. customers
  7. ORDER BY
  8. name ASC;

相关问题