Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Теоретические аспекты и практические реализации создания, внедрения и использования баз данных, СУБД, хранилищ.
  • Страница:
  • 1
  • 2
  • 3
  • 4

ТЕМА: Oracle. Загрузить файл в переменную PL/SQL block

Oracle. Загрузить файл в переменную PL/SQL block 16 июль 2011 08:20 #2059

  • Jekson
  • Jekson аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 48
  • Спасибо получено: 0
Творческого дня уважаемые господа !

Задача единоразовая, утилита SqlPlus
Есть код
declare 
     vSql Clob;
   begin 
     vSql:='select ''FFFFF'' F1...........
      ...........................................
      ...........................................
      ...........................................            
     ';
     insert into T1 values(vSql);
     commit;
   end;


Содержимое vSql - есть в наличии в скриптовых файлах их порядка 100
Копировать и вставлять в блок загрузки - трудоемко, много текстовых
констант которых нужно дополнительно выделять символом '
Подскажите можно ли командами SqlPlus - загрузить содержимое файла в
переменную блока
   define A    
   A = ЗагрузитьФайлОперсреды('c:\work\rr12.sql') 
   declare 
     vSql Clob;
   begin 
     vSql:=A;
     insert into T1 values(vSql);
     commit;
   end;


P.S. - через функцию грузить не хочется - надо создавать директорию, просить допуск
(я не админ, да и задача разовая)
Функционалом SqlPlus - можно решить проблему ?
create or replace function GetClobFromFile(iDir Varchar2,iFile Varchar2) return Clob as
  vFile BFile:=BFileName(iDir,iFile);
  vClob Clob :=' ';
  vDest Integer:=1;
  vSrcs Integer:=1;
  vLang Integer:=Dbms_Lob.Default_Lang_Ctx;
  vWars Number;
begin
  Dbms_Lob.FileOpen(vFile,Dbms_Lob.File_ReadOnly);
  Dbms_Lob.LoadClobFromFile(vClob,vFile,Dbms_Lob.GetLength(vFile),vDest,
                            vSrcs,Dbms_Lob.Default_Csid,vLang,vWars
                           );
  Dbms_Lob.FileClose(vFile);
  return vClob;
end;
/
insert into T1 values(GetClobFromFile('WORK','rr12.sql'));

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. Загрузить файл в переменную PL/SQL block 16 июль 2011 08:22 #2060

Функционалом SqlPlus - можно решить проблему ?

declare
  s varchar2(32767) := q'{
@c:\work\rr12.sql
}';

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. Загрузить файл в переменную PL/SQL block 16 июль 2011 08:24 #2061

  • Jekson
  • Jekson аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 48
  • Спасибо получено: 0

declare
s varchar2(32767) := q'{
@c:\work\rr12.sql
}';


Доброго дня
drop table T1;
create table T1 (F1 Varchar2(4000));
declare
  s varchar2(32767) := q'{
@c:\work\rr12.sql
}';
begin 
  insert into T1 values(s);
  commit;
end;  
/
select * from T1;


Имею результат
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 
Connected as andrewbond
 
SQL> 
 
Table dropped
 
Table created
 
PL/SQL procedure successfully completed
 
F1
--------------------------------------------------------------------------------
 
@c:\work\rr12.sql
 
SQL>


Т.е. имею просто строку - необходимо содержимое файла ?
Где я Вас неверно поняла?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Jekson.

Re: Oracle. Загрузить файл в переменную PL/SQL block 16 июль 2011 08:28 #2062

  • Den
  • Den аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 44
  • Спасибо получено: 0
Привет!
sqlldr не пробовали использовать?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. Загрузить файл в переменную PL/SQL block 16 июль 2011 08:30 #2063

  • Jekson
  • Jekson аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 48
  • Спасибо получено: 0
Да думал так проще, loader для загрузки САМЫХ данных.
Здесь просто скрипт......!!!!??????

Если Polton пояснит - где ошибаюсь.
Буду весьма признательна !

Момент - так q' - это операция подмены кавычек ? (или я ошибаюсь)
А файл в переменную загрузить можно ?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. Загрузить файл в переменную PL/SQL block 16 июль 2011 08:32 #2066

oracle@server2:/tmp> cat 1.sql
set serverout on
declare
  s varchar2(32000) := q'[
@&1
]';
begin
  dbms_output.put_line(s);
end;
/
oracle@server2:/tmp> date>tmp.txt
oracle@server2:/tmp> sqlplus -s "/ as sysdba" @1.sql tmp.txt

Wed Jul 13 11:47:43 EEST 2011


PL/SQL procedure successfully completed.

exit
oracle@server2:/tmp>

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3
  • 4