oracle创建文件夹_oracle数据导出expdp

oracle创建文件夹_oracle数据导出expdp1.创建目录(需要在服务器上创建对应的目录) create or replace directory testdir as '/u01/software/test'; 2.给用户授权(

Oracle的创建文件

1.创建目录(需要在服务器上创建对应的目录)
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;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6182.html

(0)
上一篇 2023-04-15
下一篇 2023-04-15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注