-1

我有一个从 .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 子句。帮助?

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

4

1 回答 1

0

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

我的猜测是,您希望SELECT语句位于 PL/SQL 块之外,并且您希望使用任何工具来执行 .sql 脚本来运行 PL/SQL 块来填充表,然后运行SELECT语句,写入结果到您将输出假脱机到的任何文件/控制台。

于 2013-08-12T20:35:49.370 回答