我在使用 Oracle 10g 数据库的查询中有这种奇怪的行为。
我调用包中包含的这个存储过程:
SQL> VAR RC REFCURSOR
SQL> EXEC MyPackage.MyProcedure('ATLANTICO', :RC )
PL/SQL procedure successfully completed.
SQL> PRINT RC
--prints the data
LURUACO
TUBARA
CGTO SALGAR
ALPES DE SEVILLA
MANATI
SOLEDAD
USIACURI
CGTO SANTA CRUZ
PONEDERA
CGTO JUAN MINA
PALMAR DE VARELA
PIOJO
SANTA LUCIA
BARRANQUILLA
POLONUEVO
REPELON
SANTO TOMAS
SUAN
JUAN DE ACOSTA
BARANOA
MALAMBO
PUERTO COLOMBIA
SABANALARGA
CGTO PATILLA
GALAPA
SABANAGRANDE
CAMPO DE LA CRUZ
EDUARDO SANTOS (LA PLAYA)
这是包中存储过程的定义:
PROCEDURE MyProcedure(iDEPTO IN VARCHAR2,oCURSOR OUT MYREFCUR) IS
BEGIN
OPEN oCURSOR FOR
select distinct city from MyTable where state=iDEPTO;
END;
如果我在包之外执行查询,这就是我得到的:
SQL> select distinct city from MyTable where state='ATLANTICO';
--data retrieved
ALPES DE SEVILLA
BARANOA
BARRANQUILLA
CAMPO DE LA CRUZ
CGTO JUAN MINA
CGTO PATILLA
CGTO SALGAR
CGTO SANTA CRUZ
EDUARDO SANTOS (LA PLAYA)
GALAPA
JUAN DE ACOSTA
LURUACO
MALAMBO
MANATI
PALMAR DE VARELA
PIOJO
POLONUEVO
PONEDERA
PUERTO COLOMBIA
REPELON
SABANAGRANDE
SABANALARGA
SANTA LUCIA
SANTO TOMAS
SOLEDAD
SUAN
TUBARA
USIACURI
28 rows selected.
如您所见,我既没有在存储过程中也没有在 SQL 查询中应用排序。那么,为什么游标返回无序的数据,使用相同的查询呢?这种行为有“科学”的解释吗?