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 クエリにも並べ替えを適用していません。では、同じクエリを使用しても、カーソルが無秩序なデータを返すのはなぜでしょうか? この行動の「科学的」説明はありますか?