컴퓨터활용/오라클

쉘에서 ORACLE SQL 실행하여 결과 받아오기

멜번초이 2008. 5. 15. 13:02

SELECT  결과를 shell에서 참조해야 하는 경우 다음과 같이 하면 된다.

방법 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/ksh
VALUE=`sqlplus -silent "user/passwd@sid" < 
  set pagesize 0 feedback off verify off heading off echo off 
  select max(c1) from t1; 
  exit; 
END` 
 
if [ -"$VALUE" ]; then 
  echo "No rows returned from database" 
  exit 0 
else 
  echo $VALUE 
fi
 
cs

방법 2

1
2
3
4
5
6
7
8
#!/bin/ksh
sqlplus ->null "usr/passwd@sid" < column num_rows new_value num_rows format 9999 
  select count(*) num_rows 
  from table_name; 
  exit num_rows 
EOF 
 
echo "Number of rows are: $?" 
cs

http://ntalbs.blogspot.com  에서  퍼옴

실제 사용된 예제를 참고한다.  프로프레임을 알아야 로직을 이해할 수 있기 때문에  설명은 생략한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#*****************************************************************#
#                                                                 #
#  목 적  : IN/OUT 구조체 컴파일 및 dlupdate                        #
#                                                                 #
#  Usage  : make_io.sh svc_name                                   #
#                                                                 #
#-----------------------------------------------------------------#
#  2008.03.12 : Ko Yun Jeong                                      #
#*****************************************************************#
#!/usr/bin/ksh
dbinfo="ID1/PASSWD1@DBNAME"
dbcon=`echo $dbinfo|cut -2 -"="
get_input_struture()
{
    input=`sqlplus -s $dbcon << EOF 
        set serveroutput on 
        set feedback off
        set heading off
        set feedback off
        set linesize 32767
    declare
        v_struct_name     varchar2(64);
    begin
        select physical_name into v_struct_name
            from dev_property
            where resource_id in 
                (select resource_id 
                    from dev_resource 
                    where physical_name = '$txcode')
                and seq = '0001'
                and field_type = 'STRUCT';
                
        dbms_output.put_line(v_struct_name);
    end;
    /
    exit
    EOF`
    echo "IN_MST : [$input]\n"
}
get_output_struture()
{
    output=`sqlplus -s $dbcon << EOF 
        set serveroutput on 
        set feedback off
        set heading off
        set feedback off
        set linesize 32767
    declare
        v_struct_name     varchar2(64);
    begin
        select physical_name into v_struct_name
            from dev_property
            where resource_id in 
                (select resource_id 
                    from dev_resource 
                    where physical_name = '$txcode')
                and seq = '0002'
                and field_type = 'STRUCT';
                
        dbms_output.put_line(v_struct_name);
    end;
    /
    exit
    EOF`
    echo "OUT : [$output]\n"
}
update_status()
{
    dbinfo="ID/PASSWD@DBID"
    dbcon=`echo $dbinfo|cut -2 -"="`
    in_msg=$input"MsgFld"
    out_msg=$output"MsgFld"
    update=`sqlplus -s $dbcon << EOF 
        set serveroutput on 
        set feedback off
        set heading off
        set feedback off
        set linesize 32767
    update dev_resource set status ='C' where physical_name = '$input';
    update dev_resource set status ='C' where physical_name = '$in_msg';
    update dev_resource set status ='C' where physical_name = '$output';
    update dev_resource set status ='C' where physical_name = '$out_msg';
    exit
    EOF`
}
# ------------------------------------------------------------ #
# input argument check
# ------------------------------------------------------------ #
func_arg_chk()
{
    echo "\nusage : $0 [-c] svc_name"
    echo "\noptions : "
    echo "       -c : 입출력구조체의 컴파일, dlupdate 확인"
    exit 1
}
# ----------------------------------------------------------- #
# make in, out structure
# ----------------------------------------------------------- #
#if [ $# -lt 1 || $# -gt 2 ]; then
if [ $# -lt 1 ]; then
    echo "\nusage : $0 [-c] svc_name]"
    echo "\noptions : "
    echo "       -c : 입출력구조체의 컴파일, dlupdate 확인"
    exit 1
fi
case $1 in
 -c)
        if [ $# -ne  2 ]
        then
            func_arg_chk
        fi
        txcode=$2
        get_input_struture
        get_output_struture
        echo "=> 생성된 소스 확인\n"
        ls -lrt $PMAPINCDIR/pfmMapper$input*.h
        ls -lrt $PMAPINCDIR/pfmMapper$output*.h
        ls -lrt $PMAPSRCDIR/pfmMapper$input*.c
        ls -lrt $PMAPSRCDIR/pfmMapper$output*.c
        echo "\n=> 컴파일한 라이브러리 확인\n"
        ls -lrt $PMAPLIBDIR/libpfmMapper$input.sl
        ls -lrt $PMAPLIBDIR/libpfmMapper$output.sl
        echo "\n=> dlupdate한 라이브러리 확인\n"
        ls -lrt $TDLDIR/mod/pfmMapper$input.sl
        ls -lrt $TDLDIR/mod/pfmMapper$output.sl
     ;;
 *)
        # -------------------------------#
        # IN_MST
        # -------------------------------#
        txcode=$1
        get_input_struture
        cp $PMAPINCDIR/pfmMapper$input.h /tmp
        cp $PMAPSRCDIR/pfmMapper$input.c /tmp
        cd /tmp
        make_pmap.sh $input
        #pfmdlupdate libpfmMapper$input.sl
        rm -/tmp/pfmMapper$input.h
        rm -/tmp/pfmMapper$input.c
        rm -/tmp/pfmMapper$input.o
        rm -/tmp/libpfmMapper$input.sl
        # -------------------------------#
        # OUT
        # -------------------------------#
        get_output_struture
        cp $PMAPINCDIR/pfmMapper$output.h /tmp
        cp $PMAPSRCDIR/pfmMapper$output.c /tmp
        make_pmap.sh $output
        #pfmdlupdate libpfmMapper$output.sl
        rm -/tmp/pfmMapper$output.h
        rm -/tmp/pfmMapper$output.c
        rm -/tmp/pfmMapper$output.o
        rm -/tmp/libpfmMapper$output.sl
        cd -
        update_status
        ;;
esac
cs



 

'컴퓨터활용 > 오라클' 카테고리의 다른 글

ORACLE exp 예제  (0) 2008.07.14
PL SQL 문법 정리  (1) 2008.06.24
오라클 기본 정보 select  (0) 2008.02.26
oracle 테이블스페이스 생성  (0) 2005.10.12
clob 컬럼 데이타 조회하기  (0) 2005.10.12