将 dbms_output 转换为 html 并有选择地抑制其他输出
Convert dbms_output to html and selectively suppress other output
我正在使用下面的代码按预期输出:
DECLARE
v_ins_param VARCHAR2(10);
CURSOR c_ins_param IS
SELECT status
FROM v$instance;
BEGIN
OPEN c_ins_param;
LOOP
FETCH c_ins_param INTO v_ins_param;
EXIT WHEN c_ins_param%NOTFOUND;
--
--
--
IF v_ins_param = 'OPEN' THEN
DBMS_OUTPUT.PUT_LINE('
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
Great! Your database is up.
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || ' ');
ELSIF v_ins_param = 'MOUNTED' THEN
DBMS_OUTPUT.PUT_LINE('
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
Database is only mounted.
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
');
ELSE
DBMS_OUTPUT.PUT_LINE('
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
Database is neither mounted or open.
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
');
END IF;
END LOOP;
CLOSE c_ins_param;
END;
/
这是它会给你的输出的“种类”:
###
Great! Your database is up.
###
最终这将是一系列像这样的匿名块“类型化”脚本,我想将其输出到单个文件。
我现在正在尝试让输出仅在 html 输出中提供文本信息。我在另一页上看到了这个,并根据我的代码对其进行了调整,看看它会如何工作:
spool c:mag.html
DECLARE
CURSOR c1 IS
SELECT * FROM dept;
BEGIN
DBMS_OUTPUT.PUT_LINE('< pre >');
DBMS_OUTPUT.PUT_LINE('< h1 >Report on Databases</h1>');
FOR mag IN c1
LOOP
EXIT WHEN c1%notfound;
DBMS_OUTPUT.PUT_LINE('< b >Department Name[/b] =' || mag.dname);
END LOOP;
END;
/
但是这样做的方式,使用:
mag.dname
不适用于我的 'non for loop' 示例。
我觉得必须有更合适的方式来实现输出。我试过:
在
上设置标记html
它不仅返回影响输出,而且影响所有代码。
有没有人以前试过这个,也许知道我如何才能得到返回数据的 html 输出?
这是一个示例 - 我将以下内容存储在名为(例如)scr.sql
的脚本中
set termout off
set feedback off
set serverout on
begin
for i in (
select
case
when status = 'OPEN' then '<p>Database is open</p>'
when status = 'MOUNTED' then '<p>Database is mounted</p>'
else '<p>Database is not happy</p>'
end status_output
from v$instance
)
loop
dbms_output.put_line(i.status_output);
end loop;
end;
.
spool /tmp/status.html
/
spool off
然后 运行 来自 SQLPlus 的
SQL> @scr.sql
我唯一的结果 status.html 是
<p>Database is open</p>
我正在使用下面的代码按预期输出:
DECLARE
v_ins_param VARCHAR2(10);
CURSOR c_ins_param IS
SELECT status
FROM v$instance;
BEGIN
OPEN c_ins_param;
LOOP
FETCH c_ins_param INTO v_ins_param;
EXIT WHEN c_ins_param%NOTFOUND;
--
--
--
IF v_ins_param = 'OPEN' THEN
DBMS_OUTPUT.PUT_LINE('
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
Great! Your database is up.
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || ' ');
ELSIF v_ins_param = 'MOUNTED' THEN
DBMS_OUTPUT.PUT_LINE('
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
Database is only mounted.
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
');
ELSE
DBMS_OUTPUT.PUT_LINE('
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
Database is neither mounted or open.
' || CHR(35) || '' || CHR(35) ||'' || CHR(35) || '
');
END IF;
END LOOP;
CLOSE c_ins_param;
END;
/
这是它会给你的输出的“种类”:
###
Great! Your database is up.
###
最终这将是一系列像这样的匿名块“类型化”脚本,我想将其输出到单个文件。
我现在正在尝试让输出仅在 html 输出中提供文本信息。我在另一页上看到了这个,并根据我的代码对其进行了调整,看看它会如何工作:
spool c:mag.html
DECLARE
CURSOR c1 IS
SELECT * FROM dept;
BEGIN
DBMS_OUTPUT.PUT_LINE('< pre >');
DBMS_OUTPUT.PUT_LINE('< h1 >Report on Databases</h1>');
FOR mag IN c1
LOOP
EXIT WHEN c1%notfound;
DBMS_OUTPUT.PUT_LINE('< b >Department Name[/b] =' || mag.dname);
END LOOP;
END;
/
但是这样做的方式,使用:
mag.dname
不适用于我的 'non for loop' 示例。
我觉得必须有更合适的方式来实现输出。我试过:
在
上设置标记html它不仅返回影响输出,而且影响所有代码。
有没有人以前试过这个,也许知道我如何才能得到返回数据的 html 输出?
这是一个示例 - 我将以下内容存储在名为(例如)scr.sql
的脚本中set termout off
set feedback off
set serverout on
begin
for i in (
select
case
when status = 'OPEN' then '<p>Database is open</p>'
when status = 'MOUNTED' then '<p>Database is mounted</p>'
else '<p>Database is not happy</p>'
end status_output
from v$instance
)
loop
dbms_output.put_line(i.status_output);
end loop;
end;
.
spool /tmp/status.html
/
spool off
然后 运行 来自 SQLPlus 的
SQL> @scr.sql
我唯一的结果 status.html 是
<p>Database is open</p>