การกำหนดเอาต์พุตของเคียวรี SQL ให้กับตัวแปร


10

ฉันกำลังเชื่อมต่อกับฐานข้อมูล Oracle และยิงแบบสอบถามและกำหนดผลลัพธ์ให้กับตัวแปร แต่เมื่อฉันสะท้อนค่าของตัวแปรมันไม่ได้รับการพิมพ์อย่างถูกต้อง

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

แบบสอบถามส่งคืนผลลัพธ์ที่ถูกต้องเมื่อเรียกใช้งานบนฐานข้อมูล แต่ตัวแปร "นับ" มีค่าที่ไม่ถูกต้อง


1
โปรดตรวจสอบว่าการเยื้องตรงกับรหัสต้นฉบับของคุณหรือไม่หลังจากฉันแก้ไขการจัดรูปแบบแล้ว (ถ้าตรงกันก็ผิดคุณไม่สามารถเยื้องตัวคั่นการปิดเอกสารที่นี่ '
manatwork

อะไรคือสิ่งที่แสดงในโหมดปกติและสิ่งที่คุ้มค่าของการนับเมื่อได้รับมอบหมาย?
ott--

คำตอบ:


13

คำศัพท์ที่ยกเลิกที่นี่ - doc ต้องเป็นอักขระตัวเดียวในบรรทัด: ไม่อนุญาตให้ย่อหน้า นอกจากนี้ใช้$()แทน backticks - เป็นแบบซ้อนได้

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-Documents


2
คุณยังสามารถใช้แท็บที่มี<<-ENDสัญลักษณ์ ไม่ใช่ช่องว่าง 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
ทำไม? ฉันคิดว่ามันจะดีกว่าถ้าคุณแบ่งปันความคิดของคุณกับชุมชนเช่นกันไม่เพียง แต่ข้อมูลโค้ดสคริปต์นี้
peterh - Reinstate 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

คุณต้องใช้เครื่องหมายอัฒภาคในตำแหน่งที่ถูกต้อง


นอกจากนี้ENDท้ายที่สุดจำเป็นต้องล้างไปทางซ้ายโดยไม่มีช่องว่างด้านหน้า
Kusalananda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.