我想从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字符。
另外,我需要知道如何在存储过程中定义它。
答案 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,打开它进行写入,写入,关闭它。
关于风格的一些评论: