Если бы это не было действительно необходимо, я бы не использовал процедуру.
Если вы вызываете скрипт с использованием SQL Plus, просто добавьте в ваш test.sql
следующее (SET
s от SQL Plus FAQ для удаления шума):
SET ECHO OFF
SET NEWPAGE 0
SET SPACE 0
SET PAGESIZE 0
SET FEEDBACK OFF
SET HEADING OFF
SET TRIMSPOOL ON
SET TAB OFF
Select owner || ';' || object_name
From all_objects;
QUIT
и перенаправить вывод в файл (test.txt
):
sqlplus user/passwd@instance @ test.sql > test.txt
Если вам действительно нужно что-то делать в PL / SQL, подумайте над тем, чтобы поместить это в функцию и вызывать ее для каждой записи:
Create Or Replace Function calculate_my_row( in_some_data In Varchar2 )
Return Varchar2
As
Begin
Return in_some_data || 'something-complicated';
End calculate_my_row;
Звоните:
Select owner || ';' || calculate_my_row( object_name )
From all_objects;
Производительность может пострадать, но она должна работать. Убедитесь, что то, что вы пытаетесь сделать, не может быть сделано в чистом SQL
, однако.
Читая ваш комментарий, я думаю, что аналитическая функция Lag
- это то, что вам нужно.
Этот пример добавляет *
в случае, если значение val
изменилось:
With x As (
Select 1 id, 'A' val FROM dual
Union Select 2 id, 'A' val FROM dual
Union Select 3 id, 'B' val FROM dual
Union Select 4 id, 'B' val FROM dual
)
--# End of test-data
Select
id,
val,
Case When ( val <> prev_val Or prev_val Is Null ) Then '*' End As changed
From (
Select id, val, Lag( val ) Over ( Order By id ) As prev_val
From x
)
Order By id
Возвращает
ID V C
---------- - -
1 A *
2 A
3 B *
4 B