如何在SQL中创建lst文件?

时间:2008-12-22 11:50:41

标签: plsql

我想从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字符。 另外,我需要知道如何在存储过程中定义它。

2 个答案:

答案 0 :(得分: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 ....

答案 1 :(得分: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 while ls = local,string
  • 我建议添加日志记录和单元测试。
  • 我建议将该方法添加到包中,因为我需要一些相关的方法来实现您最终寻找的目标。