вам придется написать код примерно так: -
сначала создайте SP следующим образом: -
create or replace PROCEDURE impact_type_test
(
v_impact_type_id IN NUMBER,
cv_1 OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN cv_1 FOR
SELECT impact_type_id
FROM impact_type
WHERE impact_type_id = v_impact_type_id ;
END;
затем в сценарии оболочки вызовите SP примерно так: -
*Вывод 1007 *
будет выглядеть примерно так: -
113
, если вы хотите прочитать определенные поля из вывода SP, посмотрите следующий код: -
create or replace PROCEDURE impact_type_test
(
v_impact_type_id IN NUMBER,
cv_1 OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN cv_1 FOR
SELECT impact_type_id as impact_type_id,IMPACT_TYPE_NM as IMPACT_TYPE_NM,SEVERITY_ORDER as SEVERITY_ORDER
FROM impact_type
WHERE impact_type_id = v_impact_type_id ;
END;
затем в сценарии оболочки вызовите SP следующим образом: -
sqlplus -S /nolog <<-! >/dev/null 2>&1
connect ${ORACLE_UID}/${ORACLE_PWD}@${ORACLE_DB};
whenever sqlerror exit sql.sqlcode;
set heading off
set verify off
set feedback off
set pagesize 0
set linesize 150
spool ${WORKDIR}/ouput_data.dat
var vc refcursor;
execute impact_type_test (1,:vc);
print vc;
spool off;
exit
!
while read -r impact_type_id IMPACT_TYPE_NM
do
echo $impact_type_id
echo $IMPACT_TYPE_NM
done <${WORKDIR}/ouput_data.dat
если вы посмотрите внимательно, SP возвращает 3 поля (Impact_type_id, SEVERITY_ORDER) Impact_type_nm, но в сценарии оболочки я читаю только 2 поля (impact_type_id), Impact_type_nm).
будет выглядеть примерно так: -
113
High