簡體   English   中英

將 shell 變量傳遞給 plsql 過程

[英]passing shell variable to plsql procedure

我正在嘗試從 shell 腳本運行我的程序。 問題是程序不讀取參數

#! /bin/bash

circle="GENX"
Date="2015/09/29"
version="V2"

/usr/ORACLE/u01/app/product/11.2.0/client_1/bin/sqlplus admin/admin@TESTDB <<"EOF"
begin
GEN_AUTOMATION.Delete_Invalid_Data('$circle','$Date','$version');
commit;
end;
/
"EOF"

它不喜歡引用 heredoc 限制字符串; 我可以復制和刪除引號修復它:

/usr/ORACLE/u01/app/product/11.2.0/client_1/bin/sqlplus admin/admin@TESTDB <<EOF
begin
GEN_AUTOMATION.Delete_Invalid_Data('$circle','$Date','$version');
commit;
end;
/
EOF

這與Oracle無關,它是shell和heredoc的工作方式; 這個:

cat <<"EOF"
$circle
"EOF"

... 也打印$circle而不是GENX

這是已知行為

在此處文檔的開頭引用或轉義“限制字符串”會禁用其正文中的參數替換。 這樣做的原因是引用/轉義限制字符串有效地轉義了 $、` 和 \ 特殊字符,並導致它們被逐字解釋。

您需要使用不帶引號的EOF來進行參數擴展。 由於重定向的bash 參考

這種類型的重定向指示 shell 從當前源讀取輸入,直到看到只包含單詞(沒有尾隨空格)的行。 然后將所有讀取到該點的行用作命令的標准輸入。

這里文檔的格式是:

<<[-]word
    here-document
  delimiter

不會對 word 執行參數和變量擴展、命令替換、算術擴展或文件名擴展。 如果 word 中的任何字符被引用,則分隔符是 word 上去除引號的結果,並且 here-document 中的行不展開。 如果 word 不加引號,則對 here-document 的所有行進行參數擴展、命令替換和算術擴展,忽略字符序列 \newline,必須使用 '\' 來引用字符 '\'、'$ ',和'`'。

因此,您必須在 bash 腳本中取消引用這個詞(在您的情況下為EOF ),以使其工作:

#! /bin/bash

circle="GENX"
Date="2015/09/29"
version="V2"

/usr/ORACLE/u01/app/product/11.2.0/client_1/bin/sqlplus admin/admin@TESTDB <<EOF
begin
GEN_AUTOMATION.Delete_Invalid_Data('$circle','$Date','$version');
commit;
end;
/
EOF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM