0

我想从 sql 脚本创建一个 lst 文件

这是我的代码:

BEGIN
DECLARE
loc_bia_foracid GAM.foracid%TYPE;
loc_fba_foracid GAM.foracid%TYPE;
out_spool VARCHAR2(32000);
BEGIN
loc_bia_foracid:= '&loc_bia_foracid';
loc_fba_foracid:= '&loc_fba_foracid';

out_spool := out_spool || '|' || loc_bia_foracid;
out_spool := out_spool || '|' || loc_fba_foracid;


END;

如果我不给出字符数,out_spool它会给我一个错误。我希望我的 lst 文件超过 32k 个字符。我还需要知道如何在存储过程中定义它。

4

2 回答 2

1

我想会是这样的

declare
loc_bia_foracid varchar2(32767);
loc_fba_foracid varchar2(32767);
out_spool clob;
begin
   loc_bia_foracid := '&loc_bia_foracid';
   loc_fba_foracid := '&loc_fba_foracid';

   out_spool := out_spool || '|' || loc_bia_foracid;
   out_spool := out_spool || '|' || loc_fba_foracid;
end;

如果你将在匿名块中使用它,你可能会因为 & 符号而得到空白的 out_spool,所以你需要在 loc_ 变量之前连接它们,比如 '&'||loc_bia...。

于 2013-03-11T11:29:08.217 回答
0

以下是上面的存储过程:

CREATE OR REPLACE FUNCTION make_lst(
  pis_bia_foracid IN GAM.foracid%TYPE,
  pis_fba_foracid IN GAM.foracid%TYPE)
RETURN VARCHAR2 AS
BEGIN
  RETURN '|' || pis_bia_foracid || '|' || pis_fba_foracid;
END make_lst;

(我还没有编译它,所以它可能不会第一次工作)

我对大于 32k 的字符串的建议是使用 CLOB(字符大对象)。一个 CLOB(取决于您的 Oracle 版本)最多可容纳 4GB 的文本。我使用 Oracle 9i,而在 9i 中,您使用 DBMS_LOB 包来初始化 CLOB,打开它进行写入,写入它,关闭它。

关于风格的一些评论:

  • 请注意在 END 标记上使用方法名称。它有助于跟踪嵌套的 BEGIN-END 块。
  • 注意变量的命名约定:pis=parameter, in, string 而 ls=local, string
  • 我建议添加日志记录和单元测试。
  • 我建议将该方法添加到一个包中,因为我怀疑您需要一些相关的方法来实现您最终想要的。
于 2008-12-22T17:45:02.527 回答