如何在 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'
进一步阅读:
我想在 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'
进一步阅读: