在存储过程内对Oracle表进行排序

时间:2013-08-12 20:20:16

标签: sql oracle stored-procedures sqlplus

我有一个存储过程,我从.sql文件运行,该文件接收来自用户的输入并运行该过程。该过程运行许多查询并在表中插入一行值。在.sql文件中,我想在运行查询后按特定列排序表。目前我有:

DECLARE
 NAMEPARAM VARCHAR2(200);
 VERSIONPARAM VARCHAR2(200);
 STARTDATE DATE;
 ENDDATE DATE;

BEGIN
 NAMEPARAM := '&1';
 VERSIONPARAM := '&2';
 STARTDATE := '&3';
 ENDDATE := '&4';

 PROCEDURE(NAMEPARAM, VERSIONPARAM, STARTDATE, ENDDATE);
 COMMIT;

 Select * from TABLE_NAME
 ORDER BY COLUMN_NAME ASC;

 EXCEPTION
 WHEN OTHERS THEN
 RAISE_APPLICATION_ERROR(-20101,SQLERRM);
 END;
 /

然而它会引发错误:

  

PLS-00428:此SELECT语句中需要一个INTO子句

我不知道为什么它需要一个into子句。帮助

编辑: 为了澄清我不希望看到排序表的输出,我希望表本身更新并按列按升序排序。

1 个答案:

答案 0 :(得分:0)

如果在PL / SQL块中放入SELECT语句,则需要对结果执行某些操作。如果您只想要一行,那么您需要SELECT INTO一个局部变量。假设您期望多行,您可以编写一个迭代行的FOR循环,或者可以BULK COLLECT将行放入PL / SQL集合中。您也可以打开SYS_REFCURSOR,但由于无法从匿名PL / SQL块返回,这似乎不太可能是您想要的。

我的猜测是你希望SELECT语句在PL / SQL块之外,你想要使用任何工具来执行.sql脚本来运行PL / SQL块来填充表格和然后运行SELECT语句,将结果写入您正在输出到的任何文件/控制台。