Используйте переменную PL / SQL в качестве переменной оболочки - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть программа PL / SQL, которая запускается с использованием скрипта bash.Теперь я хочу, чтобы переменная этой программы PL / SQL была переменной оболочки, чтобы я мог выполнять некоторые операции.Я попробовал следующее, но это не сработало.

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;
/
EXIT:RET

EOF"


echo $RET

1 Ответ

0 голосов
/ 15 сентября 2018

Вот 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...