亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: angel518
打印 上一主題 下一主題

請教,shell如何取得sql執(zhí)行的返回值 [復制鏈接]

論壇徽章:
0
11 [報告]
發(fā)表于 2011-08-20 22:17 |只看該作者
回復 7# angel518


    $?最大好像只有255吧~它的范圍應該是0~255.
    如果只需要獲得單個值的話,上面那個回復即可。如果需要獲得多個值的話,就需要使用PL/SQL塊


resultlist=`sqlplus -S user/passwd@tns<<EOF
set serveroutput on
declare
      v_a integer;
      v_b integer;
      v_c integer;
begin
      select count(1) into v_a from ta;
      select count(1) into v_b from tb;
      select count(1) into v_c from tc;
      dbms_output.put_line(v_a||chr(10)||v_b||chr(10)||v_c);
end;
/
exit
EOF`

為什么要使用chr(10)?因為可能默認的sqlplus的默認設置的glogin.sql里面的linesize設置為80。如果你求的值比較多可能會有點小問題。然后如果要解析resultlist的結果,可以使用for來解析,可以設置shell的IFS來設定delimiter.
PS:曾經使用過shell來設計過不同DB系統(tǒng)的數據對比系統(tǒng)。不過,DB的連接和斷開問題始終是頭疼的問題。最終還是通過PYTHON來實現(xiàn),因為帶各種DB API,易于實現(xiàn)。樓上有同志說的perl DB API應該也是PYTHON的發(fā)源地。

論壇徽章:
0
12 [報告]
發(fā)表于 2011-08-22 08:46 |只看該作者
--oracle
#!/bin/bash
user=aaa
password=bbb
tns=ccc

result=`sqlplus -S $user/$password@$tns
yanghong709 發(fā)表于 2011-08-20 22:01



    出來不了
我用的是Red Flag DC Server release 5.0
你的出來了,可能是沒加 1>/dev/null,所以不是echo $result執(zhí)行的結果

論壇徽章:
0
13 [報告]
發(fā)表于 2011-08-22 21:57 |只看該作者
回復 12# angel518

沒看明白你的標準輸出 1 >/dev/null在哪里寫的?
另:$result里面放置的就是標準輸出的值啊。

論壇徽章:
0
14 [報告]
發(fā)表于 2011-08-23 10:35 |只看該作者
oracle環(huán)境的話, 10樓正解; 建議將SHELL函數替換符號``修改成$()

論壇徽章:
0
15 [報告]
發(fā)表于 2011-08-23 23:52 |只看該作者
oracle環(huán)境的話, 10樓正解; 建議將SHELL函數替換符號``修改成$()
chhuma 發(fā)表于 2011-08-23 10:35



    請問一下,為什么要將反單引號換成$()?求解惑。

論壇徽章:
0
16 [報告]
發(fā)表于 2011-08-24 09:25 |只看該作者
回復 11# yanghong709


    包括DB2嗎?

論壇徽章:
0
17 [報告]
發(fā)表于 2011-08-24 11:28 |只看該作者
回復 16# java_html

不包括,sqlplus是oracle數據庫里的東西

論壇徽章:
0
18 [報告]
發(fā)表于 2011-08-24 11:32 |只看該作者
回復 15# yanghong709

見置頂貼
    在操作上,用 $( ) 或 ` ` 都無所謂,只是我"個人"比較喜歡用 $( ) ,理由是:

1,  ` ` 很容易與 ' ' ( 單引號)搞混亂,尤其對初學者來說。
有時在一些奇怪的字形顯示中,兩種符號是一模一樣的(直豎兩點)。
當然了,有經驗的朋友還是一眼就能分辯兩者。只是,若能更好的避免混亂,又何樂不為呢? ^_^

2, 在多層次的復合替換中,` ` 須要額外的跳脫( \` )處理,而 $( ) 則比較直觀。例如:
這是錯的:
  • command1 `command2 `command3` `



原本的意圖是要在 command2 `command3` 先將 command3 提換出來給 command 2 處理,
然後再將結果傳給 command1 `command2 ...` 來處理。
然而,真正的結果在命令行中卻是分成了 `command2 ` 與 `` 兩段。
正確的輸入應該如下:
  • command1 `command2 \`command3\` `

論壇徽章:
0
19 [報告]
發(fā)表于 2011-08-25 10:30 |只看該作者
回復 15# yanghong709


    功能是一樣的,只是看上去容易和單引號混淆,不容易維護
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP