文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle的创建文件

2021-05-23 15:26

关注

Oracle的创建文件

创建目录(需要在服务器上创建对应的目录)
create or replace directory testdir as "/u01/software/test";
2.给用户授权(这里可能会有问题,找不到xxx用户,需要创建用户)
grant read,write on directory testdir to xxx;
3.写入文件脚本

declare
  filehandle utl_file.file_type; --句柄
begin
  filehandle := utl_file.fopen("TESTDIR", "hello.txt", "w"); --打开文件
  utl_file.put_line(filehandle, "Hello World!");
  utl_file.fclose(filehandle); --关闭句柄
end;

暂存另一份脚本

create or replace procedure get_test_blob(i_id varchar2) is
  l_file     utl_file.file_type;
  l_filename varchar2(300);
  v_modules varchar2(3000);
  v_classes varchar2(3000);
  v_proc    varchar2(3000);
  v_sysdate varchar2(3000);
  v_count   number;
begin
  l_filename := to_char(sysdate, "yyyymmdd") || i_id ||".sh";
  l_file     := utl_file.fopen("TESTDIR", l_filename, "w");
  dbms_output.put_line("===OPEN OK===" || l_filename);
  dbms_output.put_line("#!/bin/sh");
  utl_file.put_line(l_file, "#!/bin/sh"); --写入文件

  v_sysdate := to_char(sysdate, "yyyymmdd") || i_id;
  v_modules := "/u01/srm/prod/" || v_sysdate || "/webapp/webRoot/";
  v_classes := "/u01/srm/prod/" || v_sysdate ||
               "/webapp/webRoot/WEB-INF/classes/";
  v_proc    := "/u01/srm/prod/" || v_sysdate || "/jobRunner/";

  dbms_output.put_line("mkdir -p /u01/srm/prod/" || v_sysdate ||
                       "/webapp/webRoot/modules");
  dbms_output.put_line("mkdir -p /u01/srm/prod/" || v_sysdate ||
                       "/webapp/webRoot/WEB-INF/classes");

  utl_file.put_line(l_file,
                    "mkdir -p /u01/srm/prod/" || v_sysdate ||
                    "/webapp/webRoot/modules");
  utl_file.put_line(l_file,
                    "mkdir -p /u01/srm/prod/" || v_sysdate ||
                    "/webapp/webRoot/WEB-INF/classes");
  select count(*) into v_count from h3c_test_pro_proc;
  if v_count > 0 then
    dbms_output.put_line("mkdir -p /u01/srm/prod/" || v_sysdate ||
                         "/jobRunner");
    utl_file.put_line(l_file,
                      "mkdir -p /u01/srm/prod/" || v_sysdate ||
                      "/jobRunner");
  end if;

  dbms_output.put_line("#screen");
  utl_file.put_line(l_file, "#screen");
  for rec in (select distinct trim(h.screen_path) screen_path
                from h3c_test_pro_screen h) loop
    --复制某个目录下的文件
    if rec.screen_path like "%.screen" or rec.screen_path like "%.svc" then
      dbms_output.put_line("mkdir -p " || v_modules ||
                           substr(rec.screen_path,
                                  1,
                                  instr(rec.screen_path,
                                        "/",
                                        1,
                                        length(rec.screen_path) -
                                        length(replace(rec.screen_path,
                                                       "/",
                                                       "")))));
    
      dbms_output.put_line("cp -rn /u01/srm/webapp/webRoot/" ||
                           rec.screen_path || " " || v_modules ||
                           rec.screen_path);
    
      utl_file.put_line(l_file,
                        "mkdir -p " || v_modules ||
                        substr(rec.screen_path,
                               1,
                               instr(rec.screen_path,
                                     "/",
                                     1,
                                     length(rec.screen_path) -
                                     length(replace(rec.screen_path, "/", "")))));
      utl_file.put_line(l_file,
                        "cp -rn /u01/srm/webapp/webRoot/" ||
                        rec.screen_path || " " || v_modules ||
                        rec.screen_path);
      --复制文件夹
    else
      dbms_output.put_line("mkdir -p " || v_modules || rec.screen_path);
      dbms_output.put_line("cp -rn /u01/srm/webapp/webRoot/" ||
                           rec.screen_path || " " || v_modules ||
                           substr(rec.screen_path,
                                  1,
                                  instr(rec.screen_path,
                                        "/",
                                        1,
                                        length(rec.screen_path) -
                                        length(replace(rec.screen_path,
                                                       "/",
                                                       "")) - 1)));
      utl_file.put_line(l_file,
                        "mkdir -p " || v_modules || rec.screen_path);
      utl_file.put_line(l_file,
                        "cp -rn /u01/srm/webapp/webRoot/" ||
                        rec.screen_path || " " || v_modules ||
                        substr(rec.screen_path,
                               1,
                               instr(rec.screen_path,
                                     "/",
                                     1,
                                     length(rec.screen_path) -
                                     length(replace(rec.screen_path, "/", "")) - 1)));
    end if;
  end loop;
  dbms_output.put_line("#bm");
  utl_file.put_line(l_file, "#bm");
  for rec in (select distinct trim(h.bm_path) bm_path from h3c_test_pro_bm h) loop
    if rec.bm_path like "%.bm" then
      dbms_output.put_line("mkdir -p " || v_classes ||
                           replace(substr(rec.bm_path,
                                          1,
                                          instr(replace(rec.bm_path,
                                                        ".bm",
                                                        ""),
                                                ".",
                                                -1) - 1),
                                   ".",
                                   "/"));
      dbms_output.put_line("cp -rn /u01/srm/webapp/webRoot/WEB-INF/classes/" ||
                           replace(replace(rec.bm_path, ".bm", ""),
                                   ".",
                                   "/") || ".bm" || " " || v_classes ||
                           replace(replace(rec.bm_path, ".bm", ""),
                                   ".",
                                   "/") || ".bm");
      utl_file.put_line(l_file,
                        "mkdir -p " || v_classes ||
                        replace(substr(rec.bm_path,
                                       1,
                                       instr(replace(rec.bm_path, ".bm", ""),
                                             ".",
                                             -1) - 1),
                                ".",
                                "/"));
      utl_file.put_line(l_file,
                        "cp -rn /u01/srm/webapp/webRoot/WEB-INF/classes/" ||
                        replace(replace(rec.bm_path, ".bm", ""), ".", "/") ||
                        ".bm" || " " || v_classes ||
                        replace(replace(rec.bm_path, ".bm", ""), ".", "/") ||
                        ".bm");
    
    else
      dbms_output.put_line("mkdir -p " || v_classes ||
                           replace(rec.bm_path, ".", "/"));
      dbms_output.put_line("cp -rn /u01/srm/webapp/webRoot/WEB-INF/classes/" ||
                           replace(rec.bm_path, ".", "/") || " " ||
                           v_classes ||
                           substr(rec.bm_path,
                                  1,
                                  instr(rec.bm_path, ".", 1) - 1));
      utl_file.put_line(l_file,
                        "mkdir -p " || v_classes ||
                        replace(rec.bm_path, ".", "/"));
      utl_file.put_line(l_file,
                        "cp -rn /u01/srm/webapp/webRoot/WEB-INF/classes/" ||
                        replace(rec.bm_path, ".", "/") || " " || v_classes ||
                        substr(rec.bm_path,
                               1,
                               instr(rec.bm_path, ".", 1) - 1));
    end if;
  end loop;
  dbms_output.put_line("#proc");
  utl_file.put_line(l_file, "#proc");
  for rec in (select distinct trim(h.bm_path) proc_path
                from h3c_test_pro_proc h) loop
    if rec.proc_path like "%.bm" or rec.proc_path like "%.proc" then
      dbms_output.put_line("mkdir -p " || v_proc ||
                           substr(rec.proc_path,
                                  1,
                                  instr(rec.proc_path,
                                        "/",
                                        1,
                                        length(rec.proc_path) -
                                        length(replace(rec.proc_path,
                                                       "/",
                                                       "")))));
    
      dbms_output.put_line("cp -rn /u01/srm/jobRunner/" || rec.proc_path || " " ||
                           v_proc || rec.proc_path);
      utl_file.put_line(l_file,
                        "mkdir -p " || v_proc ||
                        substr(rec.proc_path,
                               1,
                               instr(rec.proc_path,
                                     "/",
                                     1,
                                     length(rec.proc_path) -
                                     length(replace(rec.proc_path, "/", "")))));
      utl_file.put_line(l_file,
                        "cp -rn /u01/srm/jobRunner/" || rec.proc_path || " " ||
                        v_proc || rec.proc_path);
    end if;
  end loop;

  dbms_output.put_line("===EXPORT OK===");

  utl_file.fclose(l_file);

exception
  when utl_file.invalid_path then
    --无效的路径
    dbms_output.put_line("===INVALID_PATH===" || i_id);
    raise;
  when utl_file.invalid_mode then
    --无效的打开模式
    dbms_output.put_line("===INVALID_MODE===" || i_id);
    raise;
  when utl_file.invalid_operation then
    --无效的操作,文件打开错误会报这个异常,一般来说都是超长或打开方式byte型和非byte型
    dbms_output.put_line("===INVALID_OPERATION===" || i_id);
    raise;
  when utl_file.invalid_maxlinesize then
    --无效的最大长度,varchar2最大4000,raw最大32676,超过回报这个异常,所以一般要进行循环操作
    dbms_output.put_line("===INVALID_MAXLINESIZE===" || i_id);
    raise;
  when utl_file.access_denied then
    --拒绝进入指定路径,可能是授权问题
    dbms_output.put_line("===ACCESS_DENIED===" || i_id);
    raise;
  when utl_file.invalid_filehandle then
    --文件处理错误,不常见
    dbms_output.put_line("===INVALID_FILEHANDLE===" || i_id);
    raise;
  when utl_file.write_error then
    --写入错误,处理该异常最好的方式是将要写入的文件简单化,然后找准错误原因
    dbms_output.put_line("===WRITE_ERROR===" || i_id);
    raise;
  when no_data_found then
    --select时候未找到数据,不是utl_file的异常
    dbms_output.put_line("===NO_DATA_FOUND===" || i_id);
    utl_file.fclose(l_file);
    raise;
  when others then
    if utl_file.is_open(l_file) then
      utl_file.fclose(l_file);
      raise;
    end if;
  
end get_test_blob;
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯