Вот 1 способ, могут быть и другие.
Я сохраняю переменную RET в NEW_VALUE, а затем использую HOST для написания сценария с заданным значением, который вы затем отправите.
См.сделанные мной дополнения, приложенные комментариями "-- New bit"
и "--End new bit"
и вызовом ret_val.sh
в конце.
su - oracle -c "sqlplus << EOF
connect / as sysdba
set serveroutput on size 30000;
VARIABLE RET NUMBER;
DECLARE
tab_count number;
BEGIN
select count(*) into tab_count from all_tables where owner='scott';
DBMS_OUTPUT.PUT_LINE(chr(10)||'Count: '||tab_count);
:RET:=tab_count;
END;
/
-- New bit here - we're going to write out to a shell script to set the
-- value of RET to the required value
col RET NEW_VALUE RET
SELECT :RET RET FROM DUAL;
HOST echo "export RET='&r'" > ret_val.sh
-- End new bit
enter code here
EXIT
EOF"
# The ret_val.sh will have "export RET='retvalue'", so we just source this
. ret_val.sh
echo $RET