2013-12-13 2 views
1

Ниже код вставки отлично работает в SQL-разработчике, но с ошибкой в ​​sql plus.Обновление столбца в таблице с анонимным блоком pl/sql

create table abc(metric varchar2(10), line number(2), text varchar2(2000)); 

insert into abc 
(metric, line, text) 
values('abc', 1, q'#declare 
    k_sid  constant varchar2(100) := upper(sys_context('USERENV', 'DB_NAME'));  
    -- Cusor-FOR-loop over all spy_configs for k_sme ... 
    for r_stmt in (select k_sid as instance 
         ,k_sme as metric 
         ,key 
         ,value 
         ,'ERROR - spfile-parameter: '||key||' must be set to: '||value||' but is not - please check and change it !!!' as text 
        from bmw_system.bmw_spy_conf 
    raise_application_error (-20001, ' - '||sqlcode||' - '||sqlerrm,true); 
end;#') 

Есть ли какое-либо решение через sql plus parameter.Any pointer будет принята с благодарностью.

Regards, Сандип

+0

"потерпел неудачу в SQL плюс" а? –

+0

одним из вариантов является сохранение команд в файле и использование sql plus для выполнения sql из файла: http://www.techonthenet.com/oracle/questions/script.php –

+0

Я никогда не видел 'q ' # .... # 'string, показанный в списке значений INSERT, который использовался ранее. –

ответ

2

Попытка:

set sqlt/
insert into abc 
(metric, line, text) 
values('abc', 1, q'[declare 
    k_sid  constant varchar2(100) := upper(sys_context('USERENV', 'DB_NAME'));  
    -- Cusor-FOR-loop over all spy_configs for k_sme ... 
    for r_stmt in (select k_sid as instance 
         ,k_sme as metric 
         ,key 
         ,value 
         ,'ERROR - spfile-parameter: '||key||' must be set to: '||value||' but is not - please check and change it !!!' as text 
        from bmw_system.bmw_spy_conf 
    raise_application_error (-20001, ' - '||sqlcode||' - '||sqlerrm,true); 
end;]') 
/
set sqlt ; 

http://docs.oracle.com/cd/B28359_01/server.111/b31189/ch12040.htm#i2498515

SET SQLT [ERMINATOR] {; | c | ON | OFF}

Устанавливает символ, используемый для завершения сценария или ввода данных для блоков PL/SQL или операторов SQL, для выполнения сценария и для загрузки его в буфер.

Это не может быть буквенно-цифровой символ или пробел. OFF означает, что SQL * Plus не распознает терминатор команд; вы завершаете команду SQL, введя пустую строку или косую черту (/). Если SQLBLANKLINES установлен в ON, вы должны использовать BLOCKTERMINATOR для завершения команды SQL. ON сбрасывает терминатор на точку с запятой по умолчанию (;).

Смежные вопросы