尝试将 PL/SQL 块的值存储在 UNIX 变量中
Trying to to Store Value of PL/SQL Block in UNIX Variable
UNIX 代码:
#!/bin/sh
if [ $# -gt 0 ]
then
## Checking wheather or all the Server Objects are up and working
if [[ = 'PreCheck' ]];then
COUNT_SERV=`${ORACLE_HOME}/bin/sqlplus ${dbConnect} <<GETCOUNT|tee -a ${logFile}
SET HEADING ON
SET SERVEROUTPUT ON SIZE 10000
SET ECHO OFF
SET FEEDBACK OFF
@PLSQLBLCK1.sql
GETCOUNT`
fi
fi
exit 0;
SQL代码:
DECLARE
COUNT_SERV INTEGER;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
SELECT COUNT (*) INTO COUNT_SERV FROM FT_LM_SERVERS WHERE STATE <> 'START';
IF COUNT_SERV > 0 THEN
DBMS_OUTPUT.PUT_LINE('******ERROR1: One or More BG Object is Down, please restart the BG to proceed ahead******');
END IF;
END;
我正在尝试获取存储在 COUNT_SERV(UNIX)中的 DBMS_OUTPUT.PUT_LINE 的值,以便我可以提前相应地使用它。
但是,如果我执行 shell 脚本,我会在日志文件中得到如下输出:
SQL> SQL> SQL> SQL> SQL> SQL> SQL> 18 19 20
如果有些值被隐藏,请忽略,因为我不能在这里透露完整的代码。
您的代码中存在一些错误:
- 对 SQL*Plus
使用 -S
参数
- 在 PL/SQL 块的末尾添加一个斜线
- 将结尾
GETCOUNT
放在 第一 列
... 然后代码将起作用,例如:
test.sql:
DECLARE
i PLS_INTEGER;
BEGIN
SELECT COUNT(1)
INTO i
FROM dual;
IF (i > 0)
THEN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(i));
END IF;
END;
/
-- ^^^ Slash!!!
test.sh:
foo=`sqlplus -S foo/bar@bla <<EOF | tee -a logfile
SET HEADING ON;
SET SERVEROUTPUT ON SIZE 10000;
SET ECHO OFF;
SET FEEDBACK OFF;
@test.sql;
EOF` # <-- First column!!!
echo $foo; # --> Prints "1"
cat logfile # Prints "1"
UNIX 代码:
#!/bin/sh
if [ $# -gt 0 ]
then
## Checking wheather or all the Server Objects are up and working
if [[ = 'PreCheck' ]];then
COUNT_SERV=`${ORACLE_HOME}/bin/sqlplus ${dbConnect} <<GETCOUNT|tee -a ${logFile}
SET HEADING ON
SET SERVEROUTPUT ON SIZE 10000
SET ECHO OFF
SET FEEDBACK OFF
@PLSQLBLCK1.sql
GETCOUNT`
fi
fi
exit 0;
SQL代码:
DECLARE
COUNT_SERV INTEGER;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
SELECT COUNT (*) INTO COUNT_SERV FROM FT_LM_SERVERS WHERE STATE <> 'START';
IF COUNT_SERV > 0 THEN
DBMS_OUTPUT.PUT_LINE('******ERROR1: One or More BG Object is Down, please restart the BG to proceed ahead******');
END IF;
END;
我正在尝试获取存储在 COUNT_SERV(UNIX)中的 DBMS_OUTPUT.PUT_LINE 的值,以便我可以提前相应地使用它。 但是,如果我执行 shell 脚本,我会在日志文件中得到如下输出:
SQL> SQL> SQL> SQL> SQL> SQL> SQL> 18 19 20
如果有些值被隐藏,请忽略,因为我不能在这里透露完整的代码。
您的代码中存在一些错误:
- 对 SQL*Plus 使用
- 在 PL/SQL 块的末尾添加一个斜线
- 将结尾
GETCOUNT
放在 第一 列
-S
参数
... 然后代码将起作用,例如:
test.sql:
DECLARE
i PLS_INTEGER;
BEGIN
SELECT COUNT(1)
INTO i
FROM dual;
IF (i > 0)
THEN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(i));
END IF;
END;
/
-- ^^^ Slash!!!
test.sh:
foo=`sqlplus -S foo/bar@bla <<EOF | tee -a logfile
SET HEADING ON;
SET SERVEROUTPUT ON SIZE 10000;
SET ECHO OFF;
SET FEEDBACK OFF;
@test.sql;
EOF` # <-- First column!!!
echo $foo; # --> Prints "1"
cat logfile # Prints "1"