Chỉ định đầu ra của truy vấn SQL cho biến


10

Tôi đang kết nối với cơ sở dữ liệu oracle và thực hiện một truy vấn và gán đầu ra cho biến Nhưng khi tôi lặp lại giá trị của biến thì nó không được in chính xác.

count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off;
           select max(cust_id) from cutomers
           exit;
           END`
           echo $count

Các truy vấn trả về kết quả chính xác khi bắn vào cơ sở dữ liệu. Nhưng biến "đếm" có giá trị không chính xác.


1
vui lòng kiểm tra xem thụt lề có khớp với mã gốc của bạn không, bây giờ sau khi tôi sửa định dạng. (Nếu khớp, thì nó sai. Bạn không thể thụt vào dấu phân cách đóng của tài liệu ở đây như thế.)
thao tác

Những gì được hiển thị trong chế độ bình thường và giá trị của số đếm khi gán?
ott--

Câu trả lời:


13

Từ kết thúc ở đây-doc phải là các ký tự duy nhất trên dòng: không cho phép thụt lề. Ngoài ra, sử dụng $()thay vì backticks - chúng có thể lồng nhau.

count=$(sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
       set pagesize 0 feedback off verify off heading off echo off;
       select max(cust_id) from cutomers
       exit;
END
)
echo $count

http://www.gnu.org/software/bash/manual/bashref.html#Here-Document


2
Bạn cũng có thể sử dụng các tab với <<-ENDký hiệu. Không phải không gian, TABS!
slm

1
OUTPUT=$( ${OracleClientHome}/sqlplus -S user/pass@database <<EOF
set pagesize 0 linesize 32767 feedback off verify off heading off echo off
select a1.id  || '|' ||
       a1.stmt_begin_date  || '|' ||
       a1.stmt_end_date  || '|' ||
       a1.status  || '|' ||
       a1.total_recs 
from acct_stmt_file a1
 where a1.actp_cd = 'HSA'
   and a1.stmt_begin_date =trunc(sysdate);
exit;
EOF
)

echo -e "\n${OUTPUT}"

1
Tại sao? Tôi nghĩ sẽ tốt hơn nếu bạn chia sẻ ý tưởng của mình với cộng đồng, không chỉ đoạn trích đoạn script này.
peterh - Phục hồi Monica

-1
count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off
           select max(cust_id) from cutomers;
           exit;
           END`

           echo $count

Bạn phải sử dụng dấu chấm phẩy đúng chỗ.


Ngoài ra, ENDở cuối cần phải được tuôn sang bên trái, không có khoảng trắng phía trước nó.
Kusalananda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.