如何在 shell 脚本中使用 oracle $$PLSQL_LINE?

How to use oracle $$PLSQL_LINE in a shell script?

我想在 shell 脚本中记录独立块的行号。

我正在尝试使用以下代码,但它不起作用。如果有解决方案,请告诉我。

#!/bin/ksh

result=`sqlplus -s $DATABASE <<EOF
SET SET HEAD OFF;
SET PAGES 0;
SET FEEDBACK OFF;
SET SERVEROUTPUT ON SIZE UNLIMITED;
SET DEFINE OFF;

BEGIN
    DBMS_OUTPUT.put_line ('Line number: '|| $$plsql_line);
END;
/
EOF`
echo $result

我收到以下错误:

PLS-00103: Encountered the symbol "PLSQL_LINE" when expecting one of the following: 
) = - + < / > at in is mod remainder not rem => <an exponent (**)> <>
 or != or ~= >= <= <> and or like like2 like4 likec as between from using 
|| member submultiset The symbol "," was substituted for "PLSQL_LINE" to continue

需要转义的$

DBMS_OUTPUT.put_line ('Line number: '|| \$\$plsql_line);

问题在于此处文档(从第一个 <<EOF 开始)正在扩展 shell 个变量(任何以 $ 开头的变量)。您可以通过

来抑制这种行为
  • 在每个 $
  • 前加一个反斜杠
  • 或注意到此处文档没有有用的 shell 变量,通过引用第一个 EOF,例如,

    result=`sqlplus -s $DATABASE <<"EOF"

result=`sqlplus -s $DATABASE <<'EOF'

进一步阅读: